暗号

Keccak と SHA-3 の違いについて【ハッシュ】

この記事で分かること

  • Keccak と SHA-3 の具体的な違い
  • Keccak と SHA-3 の読み方と歴史について
  • どちらのアルゴリズムを使えば良いかの指針

この記事では、ハッシュアルゴリズムの Keccak と SHA-3 の違いについて解説します。

SHA-3の元になったアルゴリズムがKeccakなので同一視されがちですが、SHA-3 = Keccakではありません。

  • どこが異なるのか?
  • 読み方は?
  • 歴史は?
  • 結局どちらを使えばいい?

などを調査しましたので、良かったら最後までご覧ください!

結論から

SHA-3は、Keccakをベースに策定されたが、厳密には同じものではありません。
実際に出力されるハッシュ値も異なっていますが、具体的にどこが違うのでしょうか?

nist - What are the key differences between the draft SHA-3 standard and the Keccak submission? - Cryptography Stack Exchange
このサイトによれば、KeccakからSHA-3への唯一の変更点は、パディングルールのみと記載があります。

結論としては、
「SHA-3はKeccakを元に策定されたが、パディングルールが違うため異なるハッシュ値が出力される」
となります。

読み方について

Keccakは、キャチャック あるいは ケチャック と読みます。(ケチャックの方が一般的)

SHA-3は、エスエイチエイ・スリー あるいは シャー・スリー と読みます。

SHA-3(Keccak)とは - IT用語辞典 e-Words

歴史について

SHA-3が策定された経緯、及び時系列についてWikipediaから引用します。

SHA-3は、2004年のCRYPTOにはじまる、MD5への攻撃成功の確認[7]とSHA-1への攻撃の理論的確立という急速に進んだ在来の関数の危殆化を動機とした、アメリカ国立標準技術研究所(NIST)によるこれらに類似した構造を持たないハッシュ関数を求めたコンペティションによるものである。
しかしその後、SHA-2への攻撃法の研究は進んだものの、2017年初頭時点では効率的な(有効な)攻撃法の報告はまだ無いことなどのため、結果としてSHA-2の代替の用意が重要ではなくなるなど、状況が変化している。(なおその一方でSHA-1については、2017年2月には衝突攻撃(強衝突耐性の突破)の成功が現実に示され、SHA-2への移行は2017年現在、喫緊の要求となっている)

2012年10月2日、Keccakがコンペティションの勝者として選ばれ、2015年8月5日に正式版が FIPS PUB 202 として公表された。

SHA-3 - Wikipedia

ハッシュ値の比較

以下にKeccakとSHA-3のハッシュ値を掲載します。(計算ツール:Keccak-224 Online (emn178.github.io)
同じ入力データでも全く異なるハッシュ値が出力されていることが分かります。

Keccak-n

Keccak-224("")
f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd

Keccak-256("")
c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470

Keccak-384("")
2c23146a63a29acf99e73b88f8c24eaa7dc60aa771780ccc006afbfa8fe2479b2dd2b21362337441ac12b515911957ff

Keccak-512("")
0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e

SHA3-n

SHA3-224("")
6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7

SHA3-256("")
a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a

SHA3-384("")
0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004

SHA3-512("")
a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26

結局どちらを使えば良いのか?

Keccak と SHA-3 のセキュリティレベルはほぼ同等であると思われます。
どう使い分けるかですが、

  • イーサリアムブロックチェーンなど、明確にKeccakをハッシュアルゴリズムとして採用しているケースでは Keccak を使う
  • それ以外の、一般的なハッシュ関数としての用途の場合は SHA-3 を使う

で良いと思いますが、2022年現在 SHA-3 が積極的に採用されるケースも少ないため(SHA-2でも十分に安全だと思われている)、現時点での個人的な意見になります。

まとめ

最後に、この記事の内容をまとめます。

要点まとめ

  • Keccak と SHA-3 は同じものではない
  • Keccak と SHA-3 はパディングルールが違うため出力が異なる。

まだまだ SHA-3自体が広く使われているものではないこともあり、日本語での情報が少なかったため、簡単にまとめました。

Keccak と SHA-3 が完全に同一であれば混乱も生まれなかったと思いますが、SHA-3アルゴリズムの選定後にセキュリティ向上のための議論などがあり、色々とコミュニティと揉めた末に、今の形になったようです。

SHA-3のアルゴリズムはSHA-2までのものとは根本的に異なるものであり、今後SHA-2アルゴリズムのセキュリティ強度が問題になることがあれば、積極的に採用されていくのだと思います。(2022年現在では、SHA-2のセキュリティ強度は十分なものとみなされています)

最後まで読んでいただきありがとうございました。

この記事は役に立ちましたか?

  • この記事を書いた人
アバター画像

ゴイチ

ソフトウェアエンジニア歴20年。 C/C++, C#, Java, Kotlinが得意で、組込系・スマホ・大規模なWebサービスなど幅広いプログラミング経験があります。 現在は某SNSの会社でWebエンジニアをしています。

-暗号
-, ,