👽

ハッシュ関数 "SHA-512"とは何ぞや

2021/06/29に公開

リファクタリングをしていた時に、意味不明なラインを発見。

digest = OpenSSL::Digest::SHA512.new

一見、何?という感じだったので調べてみました。

"SHA-512"はハッシュ関数の一種

そもそもハッシュ関数って?

入力されたデータをもとにして、適当に見える値(特定のルールに沿って、ぐちゃぐちゃにした値)を返してくれる関数[1]

また、ハッシュ関数には以下の決まりがあるそう。

1.適当な値が返ってくる
2.同じ入力に対しては同じ値が返ってくる

これによってパスワードを暗号化したり、入力値が同一のものかどうかを判定するのに役立つ訳か一

"SHA" と "512" の意味

"SHA" は Secure Hash Algorithm の略

Secure Hash Algorithm は、いくつかある暗号学的ハッシュ関数グループの内のひとつで、SHAグループ内でも括りがある。

| グループ名 |説明[2]|
|-----------|---|----|
|SHA-0|SHAシリーズの最初の規格。発表から間もなくして欠点が発見された。|
|SHA-1|SHA-0の欠点を修正した規格。ハッシュ値の長さはSHA-0と同じ。|
|SHA-2|SHA-1を改良し、さらに出力されるハッシュ値の長さも長くした規格。|
|SHA-3|元Keccak。アメリカ国立標準技術研究所 (NIST) による公募で選出された。|

"SHA-512" は、上記の "SHA-2" に属している。

"512" は ハッシュ値の長さ

SHA系の語尾につきがちな16の倍数とは何か。それは ハッシュ値の長さ(ビット)

SHAの仕組みとして、規定の初期値をハッシュ値に変換するために入力された値が利用される。
ハッシュ値をさらにハッシュ値に変換する過程を繰り返し、最終的に得られるハッシュ値の長さが"SHA-●●●"の ●●● にあたる。

わかったコードの意味

OpenSSL::Digest

Rubyでサポートされている、ハッシュ関数のためのインターフェースを提供するクラス。

digest = OpenSSL::Digest::SHA512.new

これで上記のコードの意味がわかりました。
"SHA-512" でハッシュを計算するためのインスタンスを生成していた様です。

まとめ

個人で開発をしていると、このような暗号技術については触れることは少ないと思います。今回の機会を通して、世の中でプロダクト動かすために必要な技術項目を知れたのは良かったです。

また、調べている中で、仮想通貨(今は暗号資産?)に関連する面白そうな資料が多く出てきたので、仮想通貨ベースの暗号技術の記事も書いてみたいです。

(↓ "SHA-512" を体験できます ↓)

https://www.convertstring.com/Hash/SHA512

脚注
  1. https://wa3.i-3-i.info/word11948.html ↩︎

  2. https://ja.wikipedia.org/wiki/Secure_Hash_Algorithm#SHA-0 ↩︎

Discussion