PBES
PKCS #5 RFC 8018 6. Encryption Schemes パスワードベース暗号化スキーム
パスワードとハッシュ関数を使ってブロック暗号のkeyとivを生成、暗号化する 仕組み
PBKDF1を使ったPBES1とPBKDF2を使ったPBES2がある
PKCS#5 Padding と言われるのはPBES1のPadding
PBES2 は PKCS #8 などで使われる
PBES1 (旧)
共通鍵生成にPBKDF1を使ったブロック暗号
想定されている暗号の組み合わせ
MD2 DES CBC
MD2 RC2 CBC
MD5 DES CBC
MD5 RC2 CBC
SHA1 DES CBC
SHA1 RC2 CBC
入力
P パスワード
M メッセージ
ハッシュ関数(MD2,MD5,SHA1)
暗号(DES/RC2)
AlgorithmIdentifier
S SALT 最小? 64bit
c 反復回数
出力
C 暗号文
code:PBES1 Encrypt 暗号化
DK = PBKDF1(P, S, c, 16); // DK 16 オクテットの導出鍵(DK) ハッシュ関数も必要か MD2|MD5|SHA1
K = DKの前半分;
IV = DKの後ろ半分;
//PS = Mを8バイト単位にする1バイトから8バイトのPKCS#5 Padding (略)
EM = M; //+ PS; // PS はスキーム側でつけてもいいか
暗号スキーム = PKCS5Padding(CBC(暗号(K),IV))
C = 暗号スキーム(EM) // Paddingして CBCとDESかRC2かで暗号になり
return C;
https://github.com/okomeki/SoftLibCrypto/blob/master/src/main/java/net/siisise/ietf/pkcs5/PBES1.java
OpenSSL の enc 初期設定などで残っている
PBES1のASN.1
OBJECT IDENTIFIERで暗号方式まで決めるタイプ
とりあえず使えるらしいが互換目的のみでいいのかも
MD2, MD5, SHA-1 と DES, RC2 という古いものしか想定されていない
オブジェクト識別子
pbeWithMD2AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 1}
pbeWithMD2AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 4}
pbeWithMD5AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 3}
pbeWithMD5AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 6}
pbeWithSHA1AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 10}
pbeWithSHA1AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 11}
PBKDF1のハッシュ関数と暗号用ブロック暗号の組み合わせを指定する
code:ASN.1 PBEParameter
PBEParameter ::= SEQUENCE {
salt OCTET STRING (SIZE(8)),
iterationCount INTEGER }
salt 8オクテット固定のソルト
iterationCount 反復回数
OpenSSL の RSA鍵などの暗号化の旧形式(traditional)ではPBKDF1を拡張して使われる
https://github.com/okomeki/SoftLibCrypto/blob/master/src/main/java/net/siisise/ietf/pkcs5/OpenSSLPBES1.java
PBES2
共通鍵暗号の鍵生成にPBKDF2を使ったブロック暗号
HMAC(SHA256) AES256 CBC など
key と IV を一度に生成できるが IV はパラメータ渡しの場合もある (特に規定はなし?)
https://github.com/okomeki/SoftLibCrypto/blob/master/src/main/java/net/siisise/ietf/pkcs5/PBES2.java
https://github.com/okomeki/SoftLibCrypto/blob/master/src/main/java/net/siisise/ietf/pkcs5/PBES2params.java
ASN.1
PBES2はパラメータでアルゴリズムを指定する
オブジェクト識別子
id-PBES2 OBJECT IDENTIFIER ::= {pkcs-5 13}
code:ASN.1パラメータ
PBES2-params ::= SEQUENCE {
keyDerivationFunc AlgorithmIdentifier {{PBES2-KDFs}},
encryptionScheme AlgorithmIdentifier {{PBES2-Encs}} }
PBES2-KDFs ALGORITHM-IDENTIFIER ::=
{ {PBKDF2-params IDENTIFIER By id-PBKDF2}, ... }
PBES2-Encs ALGORITHM-IDENTIFIER ::= { ... }
PBKDF2のパラメータと暗号用パラメータ(自由)のセット
AESなどの鍵をPBKDF2で生成、CBCなどのIVをパラメータとして付けるパターンなどがあり
他?
RFC 3211 Password-based Encryption for CMS → 3369 CMS, 3370