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
テーマ StackJimmy によって設計されています。