koudenpaのブログ

趣味のブログです。株式会社はてなでWebアプリケーションエンジニアをやっています。職業柄IT関連の記事が多いと思います。

おすすめ技術書:暗号解読

方々で暗号解読はよいと言っているけれど、記事にしてなかったっぽいので書いておく。

www.amazon.co.jp

これで暗号のなんたるかを知った。いわゆる「技術書」ではないけれど、暗号の入門書としてとてもおすすめ。

古今東西の暗号にまつわるドキュメンタリーのテキスト化作品で、性質上強烈なインシデントの実例も知れる。

読んでいくと暗号は運用が大事であることが身に染みると思う。

20年以上前の本だけれど、現在との差分は楕円曲線暗号が実用されるようになったくらいだろう。未来の量子暗号についても記述がある。2020年代にリメイクや追記がされるとしたら、ブロックチェーンは取り上げれそうな気がする。

とにかくおすすめ。落ちはない。

身に染みるとこういう事を考えるようになる

とは言えおすすめというだけではつまらないので周辺要素を書いておく。

暗号は運用が大事であることが身に染みる

これは要するに「身に染みて欲しい」ということでもある。

昨今常用されているセキュリティ技術は、技術自体は概ね万全なものなので、セキュリティインシデントが発生するとしたらその運用がまずい場面がほとんどだ*1

ソフトウェアエンジニアが暗号を扱うときには「ソルトとIV」をよく見かける。

いずれも目的があって使われるものなので、正しく運用したい。

WebサイトのログインパスワードをDBに保存したいとする、平文で保存するとデータが流出した際のリスクが大きくなるのでハッシュ化して平文が第三者からは分からない形で保存することが望ましい。

しかし、ハッシュ化は平文が同じならハッシュ値も同じになる。素直に保存してしまうと、ハッシュ値が同じだったら平文も高い確率で同じだろうと推測できてしまう。

ここでソルトを振りかける(平文の先頭に付与するなど)。すると、元は同じ平文だったものが別なものになるのでハッシュ値も別なものになる。DBにはソルトとハッシュ値を保存する。こうすることによって同じパスワードでも別のハッシュ値を保存することが可能になる。

メジャーなログイン管理ライブラリはこういう事*2を勝手にやってくれている。

そういう事を何故するのか、を腑に落としておきたい。暗号解読を読むと腑に落ちやすくなると思う。

暗号解読推しの様子

10年以上一貫して推し続けているようだ。

twitter.com

*1:たまに脆弱性とか出てるけれどそれに対する対応も含めて運用と考える

*2:メジャーなのはbcrypt - Wikipediaだと思う