Featured image of post 【用語比較】エンコード、エンクリプト、ハッシュ

【用語比較】エンコード、エンクリプト、ハッシュ

こんにちは🔍
エンコード、エンクリプト、ハッシュって全部データを何かに変換することを表す言葉だと思うのですが、違いがいまいち分かっていない…汗
今回は、似たような言葉の意味を比較してちゃんと覚えようと思います💡


特に参考にさせていただいた記事

認証基盤サービスで有名なAuth0のブログにこんな記事がありましたので、今回はこちらを特に参考にさせていただきました。

エンコード/encoding

エンコードとは、データをある形式から他の形式に変換し、他のシステムで使えるようにすることです。

例えば、電子メールを送るときは、メールの内容を一旦ASCIIコードと呼ばれる文字コードに変換してから送信し、受信側で元に戻して(デコードして)読めるようにする、といった処理が行われています。

このように、エンコードは可逆的な処理のため、元に戻すことができます。そして、同じ情報を異なる形式で表すことで、異なるデータ形式を扱うシステム間でもデータをやりとりできるようにしているのです。

ここで注意したいのは、エンコードの目的はセキュリティ向上ではないということです。むしろ、他のシステムがデコードできるように方式を公開しておく必要があります。

エンクリプション/encryption 

エンクリプションは、権限を持たない人には分からない・デコードしにくいようにデータを変換することです。日本語だと暗号化に当たります。

先程のエンコードと似ているように思えますが、目的に違いがあります。エンコードは「(他のシステムが)分かるように変換する」のですが、エンクリプションは「(権限のない人には)分からないように変換する」という点です。

権限のある人はキーを持っているのでdecrypt(復号)できます。暗号化は、鍵(文字や数字の羅列)に基づいた数学的アルゴリズムを使うことが良いとされています。

  • 対称鍵暗号方式…encryptとdecryptに同じキーを使用する
     例)AESアルゴリズム
  • 非対称鍵暗号方式…encryptとdecryptに異なるキーを使用する
     例)RSA

ハッシング/hashing

ハッシングは、インプットデータに厳密に基づき、一意な固定長の文字列を生成することです。パスワードや電子メール、本や映像の内容など膨大なサイズのデータでも、重複しない・決まった長さのハッシュ値を算出することができるのです。  

ハッシュ化すると、同じインプットからは同じアウトプットが算出されます。逆に言えば、インプットが違えばアウトプットも違ってきます。この特徴を生かして、2つのハッシュ値を比較することで、内容に違いがないか厳密に確認することができます。

ハッシングの特徴に、ハッシュ値から元の入力値を取得するのは不可能(極めて困難)であることが挙げられます。また、ハッシュ値には衝突(異なる入力値から同じハッシュ値が算出されてしまうこと)の可能性があることが、MD5やSHAの初期のアルゴリズムで発見されています。

💡Pythonでハッシュ値を求める例は こちら の記事の中で触れています。


まとめ

encoding encrypting hashing
何か データの形式を変換すること データを暗号化すること データを固定長の文字列に変換すること
目的 他のシステムで使えるようにする 権限を持たない人には分からないようにする ハッシュ値を比較して、ファイルの同一性を確認する
可逆性 可逆 可逆 不可逆
例 ASCII, unicode, Base64 AES, RSA MD5, SHA

おわりに

それぞれの違いをまとめることができスッキリしました!!
こんがらがってしまわないように、意識して使い分けしたいと思います。

参考リンク

comments powered by Disqus
Built with Hugo
テーマ Stack は Jimmy によって設計されています。