SHA
Secure Hash Algorithm
SHA-1, SHA-2は FIPS PUB 180 としてまとめられている。最新は FIPS PUB 180-4? データのハッシュをとり、固有の番号的なものを生成する。
違うデータで一致しにくいことや逆変換が難しいことを利用する。
RFC では次期は SHA-3ではなく可変長出力のSHAKE128/SHAKE256を固定長で利用する方向のようだ SHA (SHA-0) 早期に廃止
SHA-1 FIPS PUB 180-5で削除 (2030年12月31日廃止予定) SHA-2 現在の主流
SHA-224
SHA-256
SHA-384
SHA-512
SHA3-224(M) = Keccak[448](M || 01,224)
SHA3-256(M) = Keccak[512](M || 01,256)
SHA3-384(M) = Keccak[768](M || 01,384)
SHA3-512(M) = Keccak[1024](M || 01,512)
FIPS PUB 202 6.3. RawSHAKE
RawSHAKE128(J,d) = Keccak[256](J || 11,d)
RawSHAKE256(J,d) = Keccak[512](J || 11,d)
SHAKE128(M,d) = RawSHAKE128(M || 11,d) = Keccak[256](M || 1111,d)
SHAKE256(M,d) = RawSHAKE256(M || 11,d) = Keccak[512](M || 1111,d)
cSHAKE128
cSHAKE256
TupleHashXOF
Validation System / Test Vectors
署名・検証
KMAC cSHAKE128/cSHAKE256用 KMAC128
KMAC256
KMACXOF128
KMACXOF256
SHA-3 では Keccak というアルゴリズムが採用された w=64 などいくつか値を固定して利用する
可変長のSHAKE128, SHAKE256 もある
cSHAKE128, cSHAKE256 は KMAC128, KMAC256 などで使われる
SHA-3のブロック長
1600 (5x5x64) - Keccakの強度 bit
table: ブロック長
ハッシュ 計算 ブロック長bit byte 出力サイズ
SHA3-224 1600 - 448 1152 144 224
SHA3-256 1600 - 512 1088 136 256
SHA3-384 1600 - 768 832 104 384
SHA3-512 1600 - 1024 576 72 512
SHA-3は固定長出力のためKeccakのスポンジ構造は利用しない
SHA-3系SHAKE等はpadding前の数ビットが違うことで区別できる、結果も異なるハッシュ値になる。
cSHAKE は Function名がつく。
table: XOFとか
SHA-2 -
HMAC(SHA) ○
SHA-3 ? -
RawSHAKE ?
SHAKE ◎
cSHAKE
KMAC - ○
KMACXOF ◎
OBJECTIDENTIFIER
アルゴリズムを識別するためのIDが振られている
RFCではSHA-3系はX.509、CMSに使えないのでdraftなら見つかるが正式には振られていないようだ
代わりにSHAKE128の256bit版、SHAKE256の512bit版が X.509, CMSの双方で利用できる。
RFC 8017 RSAの付録などに記述がある (Appendix A.2.4. sha224に間違いがある errataの指摘あり)
SHAKE128/SHAKE256はRFC 8702にある
NISTには存在する
table:OID
sha-1 1.3.14.3.2.26
sha-224 2.16.840.1.101.3.4.2.4
sha-256 2.16.840.1.101.3.4.2.1
sha-384 2.16.840.1.101.3.4.2.2
sha-512 2.16.840.1.101.3.4.2.3
sha-512/224 2.16.840.1.101.3.4.2.5
sha-512/256 2.16.840.1.101.3.4.2.6
sha3-224 2.16.840.1.101.3.4.2.7
sha3-256 2.16.840.1.101.3.4.2.8
sha3-384 2.16.840.1.101.3.4.2.9
sha3-512 2.16.840.1.101.3.4.2.10
shake128 2.16.840.1.101.3.4.2.11
shake256 2.16.840.1.101.3.4.2.12
shake128-len 2.16.840.1.101.3.4.2.17 バラメータ ビット長
shake256-len 2.16.840.1.101.3.4.2.18 バラメータ ビット長
RFC 5912