takahiro_itazuriの公倍数的ブログ

本やWebを通して学習したことをまとめるブログです。最大公約数(つまり、共通部分)的なという表現と対比して、「なるべく包括的にカバーしつつ、更に+αの要素も加えられたらいいな」という意味で公倍数的ブログと名付けました。

暗号学的ハッシュ関数

暗号学的ハッシュ関数とは

暗号学的ハッシュ関数Wikipediaには以下のように書かれています。

暗号学的ハッシュ関数(cryptographic hasg function)は、ハッシュ関数のうち、暗号など情報セキュリティの用途に適する暗号数理的性質をもつもの。任意の長さの入力を(通常は)固定長の出力に変換する。

暗号学的ハッシュ関数の中でもSHA-1は非常に有名です。

SHA-1

SHAはWikipediaには以下のように書かれています。

Secure Hash Algorithm、略称SHA、一群の関連した暗号学的ハッシュ関数であり、アメリカ国立標準技術研究所(NIST)によって標準のハッシュ関数Secure Hash Standardに指定されている。

このSHAの中でも1995年に発表されたSHA-1は、SSL/TLS(Sucure Sockets Layer / Transport Layer Security)やSSH(Sucure Shell)でも用いられています。

ハッシュ関数で行われている処理

暗号学的ハッシュ関数 - 安全神話の崩壊と新たなる挑戦」には、暗号学的ハッシュ関数がその内部で「すべき」データ処理には、「混ぜる」と「つぶす」の二つの操作があると書かれています。

「混ぜる」の部分は、入力値をお互いに影響させ合ったり(diffusion)、別の値と置き換えたり(confusion)して、一見すると入力値とは関係なさそうな値を出力します。次に「つぶす」の部分には二面性があり、一つは「大きなものを小さくする」という圧縮の側面と、「元に戻れなくする」という不可逆の側面です。後者の不可逆の方は、一方向性と言われています。

このようにハッシュ関数には必要な特性がいくつかあります。

ハッシュ関数の特性

ハッシュ関数は「原像攻撃」というハッシュ値から入力値を得ようとする攻撃の観点から、以下のような特性が必要とされています(Wikipediaより)。

原像計算困難性

ハッシュ値hが与えられたとき、そこからh=hash(m)となるような任意のメッセージmを探すことが困難でなければならない。これは一方向性関数の現像計算困難性に関連している。この特性がない関数は第1現像攻撃に対して脆弱である。

第二原像計算困難性

入力m1が与えられたとき、hash(m1)=hash(m2)となる(すなわち、衝突する)ようなもう1つの入力m2(m1とは異なる入力)を見つけることが困難でなけらばならない。これを「弱衝突耐性」ともいう。この特性がない関数は、第2原像攻撃に対して脆弱である。

強衝突耐性

hash(m1)=hash(m2)となるような2つの異なるメッセージm1とm2を探すことが困難でなけらばならない。

攻撃

このような安全な暗号方法が必要なのには、様々な攻撃が存在するからです。簡単な攻撃方法をいくつか説明します。

ブルートフォース攻撃

ブルートフォース攻撃は、パスワードを破るために、とにかく総当たりで試していく方法です。この方法は試行回数が多く時間がかかるため、ほとんど使われません。

辞書攻撃

辞書攻撃は、みんながよく使うようなパスワードをたくさん集め、それぞれに有名な暗号化手法を用いて暗号化したものを計算し、一覧表を作っておき、この一覧表からハッシュ値を検索する方法です。

最後に

セキュリティ人材が非常に不足しているようで、IoTが広まるにつれてセキュリティに詳しい人材の需要が今後高まると考えられます。あまり自分とは関係ないと思う人でも、基礎的なところは押さえておきたい分野ですね。