Saturday, May 14, 2016

Top down precedence algorithm

1. 方法

Wikipedia上介绍了 三种Bottom Up Parser用来解析表达式,分别是:
  • Edsger Dijkstra的shunting yard algorithm
  • Top down precedence algorithm
  • Precedence climbing algorithm
shunting yard algorithm在开源项目 EvalEx中使用到,Top down precedence algorithm在Beautiful Code这本书和开源项目 Rodin Tool中有介绍
我只用Top down precedence algorithm写过一个类似逻辑门的解析器,支持
  • bool 变量
  • 括号
限制:the operator-precedence parser can parse all LR(1) grammars where two consecutive nonterminals never appear in the right-hand side of any rule.

2. Top down precedence algorithm原理

TDPA的核心就是下面一个递归函数expression():
var expression = function (rbp) {
    var left;
    var t = token;
    advance( ); // (2)
    left = t.nud( ); // (1)
    while (rbp < token.lbp) { // (3)
        t = token;
        advance( );
        left = t.led(left);
    }
    return left; // (4)
}
一个典型的中缀运算符实现
symbol("*", 70).led = function (left) {
    this.first = left;
    this.second = expression(70);
    this.arity = "binary";
    return this;
};
给定一个父节点的优先级,expression函数出解析一个表达式,这个表达式最顶层的运算符的优先级不会低于给定的父节点的优先级
首先需要给operator定义nud或/和led函数
  • 前缀表达式和值(literal, constant):定义nud(null denotation符号)
  • 中缀和后缀操作符: 定义led(left denomination)
注意nud和led返回的也是一个expression,并且可能递归的调用expression
该算法描述如下:
  • (1) 表达式的第一个字段必须后面几种之一:前缀表达式,值(literal, constant) ,因此调用第一个token的nud函数,返回一个表达式用left表示
  • (2) 读取第二个符号
  • (3) 当父节点的优先级小于当前token(操作符)的优先级时,继续把该token左边的表达式(树)给他,从而解析出新的left
  • (4) 返回left
  • 开始解析式expression的rbp为0
例如给定表达式 a + b * c * d,假定+的优先级为1, *为2
执行过程:
simple expressoin.png

3. Ref

Friday, May 13, 2016

Keycloak as Central Authentication Service

1. Keycloak对我们的作用

我们公司对内有应用后台、运维,运营等应用需要需要内部人员登陆后使用。 同时我们的这些应用在各个国家都有部署,并且需要给相应的合作方创建账号。
  • 免去自己编写认证,用户管理,群组管理等功能
  • 实现SSO

2. 应用的开发语言

  • 我们的网站有三种类型play framework, php和spring boot
    • spring boot直接用keycloak-spring-security-adapter
    • play framework用keycloak-core和keycloak-adapter-core

3. 方案

  • 使用一个master realm,这样每个人只有一个账号,不用记很多密码
  • 每个部署的应用增加一个Keycloak client,并在其中创建ROLE,通过给每个账号分配不同client的不同role实现权限管理
  • 应用通过从keycloak获取的group信息做athorization决策
  • 使用HTTPS连接到keycloak
    • 证书是认证过的,免得非IT人员在打开keycloak的时候因为浏览器警告而迷惑
    • 应用到keycloak也使用https,但是不做证书的合法性认证。因为证书有有效期,失效后会导致需要重新更新应用的trust-store,很麻烦
  • 网站对外是http的,对内必须是用https,否则无法使用keycloak的https。原因如下下面的代码:
OAuthRequestAuthenticator
protected String getRedirectUri(String state) {
        String url = getRequestUrl();
        log.debugf("callback uri: %s", url);
        if (!facade.getRequest().isSecure() && deployment.getSslRequired().isRequired(facade.getRequest().getRemoteAddr())) {
            int port = sslRedirectPort();
            if (port < 0) {
                // disabled?
                return null;
            }
            KeycloakUriBuilder secureUrl = KeycloakUriBuilder.fromUri(url).scheme("https").port(-1);
            if (port != 443) secureUrl.port(port);
            url = secureUrl.build().toString();
        }
        ...
        }

Wednesday, May 11, 2016

Network Security Summary - Part2

1. Hash

  • 生成fingerprint保证integrity,问题是如何保证digest本身的integrity
  • To provide data integrity, any message could be simply encrypted. 但是太费CPU,可以通过Hash达到相同效果。

1.1. 常见算法

  • MD5 (Message Digest 5)
  • SHA­1
  • SHA­2 family: SHA­224, SHA­256, SHA­384 and SHA­512
Table 1. 性能比较 Execution time in seconds ( (参考 )
SHA512
18.339390993118286
18.11187481880188
18.085782051086426
MD5
10.275190830230713
10.155328989028931
10.250311136245728
SHA1
11.985718965530396
11.976419925689697
11.86873197555542
SHA256
16.662450075149536
21.551337003707886
17.016510963439941

1.2. 流程

Message Digest.png

2. MAC

  • Message Authentication Code
  • 保证integerity和authentication
  • Digest+key,Digest保证integrity,key保证authentication
有两种
  • CMAC(Cipher-based),使用对称加密
  • HMAC(hash-based),使用hash(更常用)

2.1. 流程

MAC.png

3. Digital Signature

  • 同MAC一样,也是为了保证integerity和authentication
  • 先将message digest,再将digest加密

3.1. 常见算法

  • RSA­MD5,
  • RSA­SHA­1
  • RSA­SHA­256
  • RSA­SHA­384
  • DSA (Digital Signature Algorithm: a US Government standard defined in FIPS­186 rev 4)
  • ECDSA (Elliptic Curve Digital Signature Algorithm defined in FIPS­186 rev 4).

3.2. 流程

Digital Signature.png

4. TLS/SSL

4.1. 版本

  • openssl支持SSLv3, TLSv1, TLSv1.1, TLSv1.2
  • SSLv2和SSLv3已经作废
  • TLSv1.3还在Draft

4.2. 协议

  • 分为两个阶段
    • TLS handshake protocol
    • TLS record protocol
  • handshake的管理以下内容
    • 协商cipher suite
    • Session key信息(master secret)
    • 认证server,认证client(optional)
  • record管理的内容
    • 数据的integrity,使用mac
    • 数据加密

4.2.1. Cipher suite

一个ciper suite定义:
  • key exchange algorithm
  • bulk-date encryption algorithm type
  • MAC algorithm type
完整的列表参考: TLS Cipher Suites

4.2.2. handshake流程

tls handshake.png
  • ClientHello
    • 我支持的版本
    • 我支持的Cipher suite
    • client的random number
  • ServerHello
    • 选择的版本
    • 选择的Cipher suite
    • server的random number
  • Certificate
    • server的certificate,包含了public key
    • client需要验证
  • ClientKeyExchange
    • Client自己生成pre-master key
    • 将pre-master key用server的public key加密
    • 这步骤可能随着Cipher suite有所不同(猜的),比如Diffie Hellmen
  • server和client各自生存一个master-key
    • 生成的是一样的
    • 这是个对称密钥,作为后续报文使用
ssl master key.png

4.2.3. record protocol功能

  • Dividing outgoing messages into manageable blocks, and reassembling incoming messages.
  • Compressing outgoing blocks and decompressing incoming blocks (optional).
  • Applying a Message Authentication Code (MAC) to outgoing messages, and verifying incoming messages using the MAC.
  • Encrypting outgoing messages and decrypting incoming messages.

4.3. certificate

4.3.1. 颁发流程

CA颁发流程
Usage of Digital Certificate.svg

4.3.2. Sample

Sample
Certificate:
 Data:
  Version: 3 (0x2)
  Serial Number:
   bb:7c:54:9b:75:7b:28:9d
  Signature Algorithm: sha1WithRSAEncryption
  Issuer: C=MY, ST=STATE, O=CA COMPANY NAME, L=CITY, OU=X.509, CN=CA ROOT
  Validity
   Not Before: Apr 15 22:21:10 2008 GMT
   Not After : Mar 10 22:21:10 2011 GMT
  Subject: C=MY, ST=STATE, L=CITY, O=ONE INC, OU=IT, CN=www.example.com
  Subject Public Key Info:
   Public Key Algorithm: rsaEncryption
    RSA Public Key: (1024 bit)
     Modulus (1024 bit):
      00:ae:19:86:44:3c:dd...
      ...
      99:20:b8:f7:c0:9c:e8...
      38:c8:52:97:cc:76:c9...
   Exponent: 65537 (0x10001)
 X509v3 extensions:
  X509v3 Basic Constraints:
   CA:FALSE
 Netscape Comment:
  OpenSSL Generated Certificate
 X509v3 Subject Key Identifier:
  EE:D9:4A:74:03:AC:FB...
 X509v3 Authority Key Identifier:
  keyid:54:0D:DE:E3:37...

 Signature Algorithm: sha1WithRSAEncryption
  52:3d:bc:bd:3f:50:92...
  ...
  51:35:49:8d:c3:9a:bb...
  b8:74
几个需要注意的
  • Issuer,是CA (root 或 intermediate)的DN (LDAP的Distinguished Name)
  • Subject, 证书的DN,DN中的CN一般是DNS

Tuesday, May 10, 2016

Network Security Summary - Part1

Security Notes

1. 重要的定义

  • Plain text(Clear text): 未加密的消息
  • Cipher: 加密算法
  • Encryption: 加密, 利用Cipher变化Data的过程
  • Cryptography: 密码学, 利用Cipher加密或解密消息
  • Credential: 就是密码(可以是文本,指纹等形式)
  • Authentication: 认证,证明你是你
  • Authorization: 授权,有时候又叫privilege,决定你能干嘛
  • Bit Strength: 度量Cryptographic算法破解难度的单位,和
  • Key size(Key length): key的长度,和Bit Strength可能相同也可能不同。RSA Key length/Key size of 2048 bits has a Bit Strength of 112 bits.
  • Hash(digest/fingerprint):将无穷大的数据,变成唯一/固定长度/很小 的数据的过程。就像用人的指纹代表整个人。

2. 密码学

2.1. 特点

  • 假定Attacker知道算法而不知道密钥
  • 理论上可以暴力破解,但是用computationally infeasible保证不被破解,而且随着计算能力的提升,computationally infeasible会改变
  • 破解成功的人往往不会主动宣布自己破解了,因此需要temper proof或temper aware环境,或者定时修改密钥

2.2. 应用

  • confidentiality(机密性)
  • authentication 认证
  • integrity 完整性

3. 对称加密

3.1. 特点

  • 称呼:Symmetric encryption, single­key, shared­secret, private­key systems, 使用一个(组)key加解密
  • 一旦key泄露影响所有的人
  • 加密比非对称加密效率高,一般是加密bulk data streams的唯一方法
  • 常见key size: 64, 128, 192 or 256 bits.

3.2. 常见的算法

  • DES (Data Encryption Standard a.k.a Data Encryption Algorithm (DEA),
  • Triple DES (TDES a.k.a. TDEA (Triple Data Encryption Algorithm)),
  • AES (Advanced Encryption Standard),
  • IDEA (International Data encryption Algorithm)
  • RC4 (Rivest Cipher 4 as of 2013 regarded as capable of being cracked, though attacks not yet proven or published)

3.3. 流程

Symmetric Cryptography.png

4. 非对称加密

4.1. 特点

  • Asymmetric encryption algorithms, public­key cryptographic systems, nonsecret encryption, 使用一对key: a public and a private key
  • 效率低
  • 一般not used to encrypt bulk data streams.

4.2. 常见算法

  • RSA (after the inventors Rivest, Shamir, and Adelman)
  • DSA (Digital Signature Algorithm)
  • Elliptic Curve Cryptography (ECC)

4.3. 流程

Asymmetric Cryptography.png

4.4. 认证public key

A Public Key Infrastructure (PKI), trusted third party (CA).