「SHA-3」の版間の差分
提供: セキュリティ
(ページの作成:「SHA-3 とは、暗号学的ハッシュ関数 Keccak を元にしています。 '''読み方''' ;SHA-3:しゃ すりー ;Keccak:けちゃっく __TOC__ == 概...」) |
|||
行1: | 行1: | ||
− | [[SHA-3]] とは、暗号学的ハッシュ関数 Keccak を元にしています。 | + | [[SHA-3]] とは、暗号学的ハッシュ関数 Keccak を元にしています。[[SHA-2]]の次世代なハッシュ関数として公募されました。 |
'''読み方''' | '''読み方''' | ||
行7: | 行7: | ||
== 概要 == | == 概要 == | ||
+ | [[SHA-3]]は、[[SHA-2]](SHA-224,SHA-256, SHA-384, SHA-512)の次世代のアルゴリズムとして公募されました。 | ||
+ | |||
+ | Keccak は、スポンジ構造に基づくハッシュ関数(スポンジ関数)です。 | ||
+ | [[SHA-3]]では、Keccak-f[1600]の撹拌関数を使用します。 | ||
+ | |||
[[SHA-3]]は、64ビットのワード長を用います。 | [[SHA-3]]は、64ビットのワード長を用います。 | ||
+ | == スポンジ関数 == | ||
+ | 古い設計のハッシュ関数は、以下の要素で構成されています。 | ||
+ | * 入力圧縮関数 | ||
+ | * 内部状態バッファ | ||
+ | * 撹拌関数(かくはんかんすう) | ||
+ | |||
+ | 入力圧縮関数の役割は以下の通りです。 | ||
+ | * 撹拌関数の呼び出し回数を減らす | ||
+ | * 前処理を行う。大きな入力ブロックを内部状態サイズ以下に不可逆にまとめる。 | ||
+ | |||
+ | スポンジ関数では、「大きな内部状態 = スポンジ」を用いることで、複雑な圧縮関数を不要にします。 | ||
== 使い方 == | == 使い方 == | ||
− | === Python | + | === Python での使用例 === |
FreeBSDにpkgコマンドでインストールする場合は、以下の通りです。 | FreeBSDにpkgコマンドでインストールする場合は、以下の通りです。 | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> |
2014年11月2日 (日) 11:36時点における最新版
SHA-3 とは、暗号学的ハッシュ関数 Keccak を元にしています。SHA-2の次世代なハッシュ関数として公募されました。
読み方
- SHA-3
- しゃ すりー
- Keccak
- けちゃっく
概要
SHA-3は、SHA-2(SHA-224,SHA-256, SHA-384, SHA-512)の次世代のアルゴリズムとして公募されました。
Keccak は、スポンジ構造に基づくハッシュ関数(スポンジ関数)です。 SHA-3では、Keccak-f[1600]の撹拌関数を使用します。
SHA-3は、64ビットのワード長を用います。
スポンジ関数
古い設計のハッシュ関数は、以下の要素で構成されています。
- 入力圧縮関数
- 内部状態バッファ
- 撹拌関数(かくはんかんすう)
入力圧縮関数の役割は以下の通りです。
- 撹拌関数の呼び出し回数を減らす
- 前処理を行う。大きな入力ブロックを内部状態サイズ以下に不可逆にまとめる。
スポンジ関数では、「大きな内部状態 = スポンジ」を用いることで、複雑な圧縮関数を不要にします。
使い方
Python での使用例
FreeBSDにpkgコマンドでインストールする場合は、以下の通りです。
sudo pkg install py27-pysha3
pip コマンドでインストールする場合は、以下の通りです。
sudo pip install pysha3
- SHA3-n と Keccak-n では、 n = 224, 256, 384, 512 が出力ハッシュ長です。
- SHA-3は、パディングの前に2ビット列01がメッセージに追加されます。
- 出力は、16進数法です。
$ python Python 2.7.8 (default, Oct 2 2014, 23:44:28) [GCC 4.2.1 Compatible FreeBSD Clang 3.3 (tags/RELEASE_33/final 183502)] on freebsd10 Type "help", "copyright", "credits" or "license" for more information. >>> import hashlib >>> import sha3 >>> hashlib.sha3_256('Hello, sha3').hexdigest() '5be6f964fa568b10d11a96ac71db61147f9feff53660d5a4bdc25ccd9236f74b' >>> hashlib.sha3_384('Hello, sha3').hexdigest() '0f83cd7c6621c0c93e93e2297c6ecb32313456558c01b4610e324c8b21fd4979 235eda042e95d31b9a4da15aab137eb3' >>> hashlib.sha3_512('Hello, sha3').hexdigest() '7ffe017ccf8c75d4255ae3e1513f6c718edd51c0dcaaf908a1c3799b433801b9 bd0a110cc6bb58062e8f47428d3f9133fad8c15b30c51d016d1832664db2930d'