AES_128_CBC and AES_128_CTR algorithm

AES 算法,分组长度为128 bit,密钥长度可为128、192、256 bit。

AES_128_CBC(Cipher Block Chaining)
1、The total number of bits in the plaintext must be a multiple of the block size, 128bit。
      加密就是将各段加密然后拼接起来,再在头上加上IV,输入包含:aes key、IV、plaintext | padding,输出为:ciphertext;
      解密时,输入包括:aes key、IV、ciphertext,输出为:plaintext。

2、CBC Encryption: C1 = CIPHK(P1 IV);
                                  Cj  = CIPHK(Pj  Cj-1)            for   j = 2 … n.
        CBC Decryption: P1 = CIPH-1K(C1) IV;
                                   Pj = CIPH -1K(Cj)  Cj-1       for j = 2 … n
       其中 IV 是128 bits,其生成参考《sp800-38a.pdf》p27;
       padding 具体参考《sp800-38a.pdf》p24 和 《rfc 2630》,我没搞清楚;
       CIPHK 指的是 aes128 的加密函数,CIPH -1K 指的是 aes128 的解密函数。

3、图示
      请看《sp800-38a.pdf》 p17。

 

AES_128_CTR(Counter)

1、The total number of bits in the message is (n-1)b+u, where 1≤ u≤ b。
      加密就是各段加密拼接,再在头上加上initial counter。输入包含:aes key、initial counter、plaintext,输出为:ciphertext;
      解密时,输入包括:aes key、initial counter、ciphertext,其输出为:plaintext。

2、 CTR Encryption: Oj    = CIPHK(Tj)                 for j = 1, 2 … n;
                                 Cj    = Pj Oj                      for j = 1, 2 … n-1;
                                 C*n = P*n MSBu(On).
       CTR Decryption: Oj    = CIPHK(Tj)                 for j = 1, 2 … n;
                                 Pj    = Cj Oj                       for j = 1, 2 … n-1;
                                 P*n = C*n MSBu(On).
       其中 initial counter 即 T1 是 128 bits,其生成参考《sp800-38a.pdf》p26;
       T2....Tn 的生成是通过 Incrementing Function,参考 《sp800-38a.pdf》p25,其实就是在原基础上加 1;
       CIPHK 指的是 aes128 的加密函数;
       MSB 指的是 Most Significant Bit。

3、图示
      请看《sp800-38a.pdf》 p23。

 

本文所有东西均归纳自《sp800-38a.pdf》。

你可能感兴趣的:(Algorithm,加密,算法,function,解密,encryption)