現代の組織の主な目的は、強固なサイバーセキュリティを確保することです。スタートアップであっても大企業であっても、データを扱うなら安全性を高める最良の方法を学ぶ必要があります。しかし、数多くのサイバーセキュリティ対策が提供されており、混乱を招くこともあります。
健全なサイバーセキュリティ戦略の構築を検討中ですか?本記事では、以下の疑問について明快に説明します:
よろしければ、今後の10分間を投資して、ハッシング、ソルト化、暗号化について詳しくご覧ください。長く有益な記事です。
権限のないリソースがデータにアクセスできないようにする有効な手段として、ハッシングは対象データに数学的な関数を適用し、鍵のような役割を持たせます。ハッシュ関数は、決まったパターンを持たない文字列です。一度データが鍵に変換されると、元に戻すことはできません。このため、ハッシングは非変換かつ一方向の処理となります。
生成されたハッシュキーは主にデータベースに保存され、エンドユーザーはこれらを利用して元データの正しさを確認します。ログインパスワードの保管が一般的な用途です。
これらはハッシングの手順を決めるものです。
動作や提供されるセキュリティに応じて、ハッシングにはいくつかのアルゴリズムがあります。ここでは一般的に利用されるものを紹介します:
MD5は、MD4の潜在的な欠点を解消するために生まれました。Facebookで用いられたことから非常に人気があり、様々な入力に対して128ビットの出力を生成します。正式名称はMessage Digest 5で、データの整合性確認に利用されることが多いです。
十分なデータセキュリティは提供しませんが、暗号文を元に戻せないため、多くのプラットフォームでパスワードや指紋データの暗号化に広く使われています。
SHA-2は非常に安全なハッシュアルゴリズムで、高度なセキュリティを求める現場で利用され、ほぼ破ることができません。多数のバージョンが存在し、各バージョンで出力長が異なります。例えば、SHA-256は256ビットの出力を生成します。
電子メールの暗号化、ブロックチェーン技術、データ認証、パスワードの暗号化などに用いられ、米国政府も公式かつ機密性の高いデータの暗号化に採用しています。日常生活に欠かせないサイバー空間のあらゆる分野で利用されています。
CRCはCyclic Redundancy Codeの略で、様々な拡散特性と高速なファイル転送で知られています。このアルゴリズムは短い固定長の2進コードを生成し、データの正当性確認に用いられます。ただし、能力が限定的なため、特にハッシング目的ではあまり使われません。
192ビットのハッシングシステムに基づくTigerは、1995年に設計されたアルゴリズムです。現代のデータ駆動型デバイスの裏で活躍しており、その超高速な処理と効率の良さが人気の理由です。最近、強化版のTiger 2が登場しました。
RipeMDは1990年に誕生し、その後幾度かの改良を経てきました。使用するビット長に応じてRIPEMD-160、320、256のバージョンがあり、出力が長いほどセキュリティが向上します。
xxHashはRAM並みの速度で動作する非暗号系アルゴリズムです。現在、4つのバージョンが存在し、低い複雑さと高速な処理が特徴です。システムのRAMの速度で動作しますが、HMACでの使用は推奨されません。
迅速な攻撃を防ぐため、BCryptは意図的に処理を遅くするアルゴリズムです。つまり、前述のアルゴリズムとは対照的な設計となっています。パスワードの解読を可能な限り遅らせるため、ハッシングとソルト化を組み合わせています(後述)。
シンプルなアルゴリズムを求める場合は、適応性の高いArgon2を検討すべきです。2015年のパスワードハッシュコンペティションでその有効性が評価されました。
Argon2の3つのバリエーションは、いずれも作業係数と組み合わせられており、各バージョンで実行速度が異なります。
さて、ハッシングでよく使われる主要な手法はご理解いただけたかと思いますが、なぜサイバーセキュリティの専門家や研究者がハッシングに注目するのでしょうか。その理由は、ハッシングによって実現したい目的にあります。次に詳しく説明します。
ハッシングの主な目的は、パスワード保管を安全にすることです。ウェブサイト用のパスワードが作成されると、ハッシングアルゴリズムを通して自動的にハッシュ形式でキャッシュに保存されます。
一度生成された鍵は復元できないため、パスワードを取り戻すことはできず、攻撃が成功してもハッカーには意味がありません。このようにハッシュアルゴリズムは、ウェブサイトに保存されたユーザーのパスワードを守ります。
ハッシュアルゴリズムの短所として、ハッシュ衝突が挙げられます。これは、異なる入力から同じ出力が生成される現象を意味し、どの入力から出力が得られたか判断するのは困難です。
その理由の一つとして、類似入力をまとめるローカリティセンシティブハッシングが挙げられます。理由にかかわらず、ハッシュ衝突が存在すると攻撃者がパスワードを解読しやすくなるため、対策が必要です。
これは、入力にわずかな変更を加えると、全く異なるハッシュが生成される現象を指します。新たに作られたハッシュは以前のものと一切類似せず、判別が困難になります。デジタルセキュリティの観点から、異なるハッシュが生成されるため、攻撃者が推測しにくくなる点で有益です。
戦時中に将校が仲間に送る平文のメッセージを思い浮かべてください。もし使者が敵に捕まり、メッセージが漏れれば大きな問題になりますよね。
この問題を避けるため、送信側と受信側はメッセージの暗号化と復号化に用いる式を作成します。これにより、秘密のメッセージを見たとしても敵側は内容を理解できません。
デジタル世界では、この式を「鍵」と呼び、暗号化と復号化の処理全体を「暗号化」と呼びます。これは可逆的な双方向プロセスであり、平文と暗号文の相互変換が可能です。情報の暗号化と復号化を容易かつ正確に実施できます。
技術的には、平文を暗号文に変換することで、人間には読めず、機械にも理解されず、推測されにくい状態にします。暗号文は、通常のテキストやデータに数学的な式を適用することで作られます。
定義はご理解いただけたかと思います。次に、どのようにして暗号化が行われるのか説明します。実際、暗号化された出力を得る方法はいくつか存在します。
主な種類は以下の通りです:
一つの鍵のみを用いる現代的な技法です。暗号化と復号化に同じ鍵が使用され、先進的な方法として世界中で利用されています。
これは、異なる用途のために別々の鍵(公開鍵と秘密鍵)を生成して使用する方法です。名前の通り、公開鍵は広く公開され、秘密鍵は共有されません。この方法は古くから利用されています。
ハイブリッド方式は、前述の共通鍵暗号と公開鍵暗号を組み合わせたものです。共通鍵暗号の速さと公開鍵暗号の柔軟性、双方の特長を併せ持ちます。
実行するたびに異なる暗号文を生成するため、ランダムなパターンで動作します。ただし、暗号文を平文に戻すことが比較的容易なため、セキュリティ面では望ましくありません。
名前の通り、同じ平文に対して必ず同じ暗号文を生成するため、予測可能性が高く、ハッカーが容易に解読できる恐れがあります。
暗号化は、脆弱な情報を守り、ハッカーからアクセスを防ぐために行われます。多くのウェブサイトでは、パスワード保管や決済、ログインページで採用され、送信データがサイバー犯罪者に容易に入手されないよう対策されています。
平文が入力されると、数学的な式によって平文が乱れた文字列に変換され、暗号文を読み取るためには鍵が必要となります。
まれに攻撃者がその鍵を入手する場合もありますが、通常は重要なデータを守る効果があります。
アルゴリズム、パターン、または式は、どの処理においても中心的な役割を果たします。暗号化の場合、各アルゴリズムは異なる動作をし、セキュリティの範囲も異なります。貴社やエンドユーザーのアカウント・データを守るためには、それぞれのアルゴリズムとその有効性を理解することが大切です。
強力で有用な技術として、1998年から使用が続けられています。
AESは一般的に使われる共通鍵暗号であり、AES-128ビットとAES-256ビットの2種類が存在します。
前者は性能に優れ、後者はより安全です。総当たり攻撃に対するしっかりとした保護がAESの特徴です。
名前からある程度想像できるかもしれません。詳しく説明します。
自動暗号化処理により、1つのデータブロックを3回暗号化します。通常より大きい鍵を使用するため、セキュリティが向上します。
この方式は共通鍵暗号であり、データブロックのサイズ(処理能力)は64ビットです。
RSAは多くの開発者やサイバーセキュリティ専門家に支持されています。貴社もその一人であれば理解いただけるでしょう。
RSAは非対称暗号の従来型アルゴリズムで、暗号化用と復号化用に別々の鍵を使用します。因数分解の手法でデータを守る仕組みです。
これまで説明した2つの暗号化手法とは全く異なる動作をし、これらの安全性をさらに強化する目的で使われます。攻撃者に好まれるレインボーテーブルを無効にするために設計されました。
ハッカーは、ハッシュアルゴリズムを突破する際、以前に生成されたコードやハッシュを利用して元のパスワードを割り出そうとします。一般的なパスワードハッシュやハッシュダンプ(ハッシュアルゴリズムによって作成されたもの)がレインボーリストの一部となり、これらを照合することで攻撃が行われます。
ソルト化の目的は、ハッシュアルゴリズムの安全性をさらに高め、レインボーテーブルに登録されることを防ぐ点にあります。
パスワードにランダムな文字を追加し、レインボーテーブルと一致しなくする処理を指します。追加された文字によって、たとえレインボーテーブルに同じパスワードがあっても一致しなくなります。
攻撃者が余分な記号や文字を付加して本来のパスワードを見つけ出そうとする可能性もありますが、そのためには膨大な労力と時間が必要となります。したがって、パスワードにソルトを加える方法は、ハッシュ化したパスワードの安全性を向上させる簡単で確実な手法です。
ただし、繰り返し同じまたは予測可能なソルトを使用してはいけません。そうなると、ソルト化の効果は失われます。
どちらもデータを乱れた形に変えるため、同じものと思われがちですが、違いがあります。
暗号化はデータを2回行うのに対し、ハッシングは1回のみ行われます。
暗号化ではデータを暗号化・復号化でき、元のテキストを取り戻せますが、ハッシングでは平文の復元は不可能です。
現代の企業が直面しているサイバー脅威を考えると、最適なサイバーセキュリティ対策を採用することは不可欠です。一つの手法だけでは不十分な場合があります。幸いなことに、ハッシングとソルト暗号を組み合わせることで安全性を向上させることが可能です。
ハッシュ化されたパスワードにソルトを追加するだけで、パスワードは非常に強固なものとなり、ハッカーやサイバー犯罪者が容易にアクセスできなくなります。追加された文字を推測するには、大量のテーブルやパスワードの比較が必要となり、それは非常に手間がかかります。こうした理由から、重要な情報にはソルト化とハッシングの併用が推奨されます。
ハッシング、ソルト化、暗号化はいずれも一度に理解するには難しい概念です。上記の記事は詳細かつ正確ですが、手短に復習したい場合のために比較表も用意しました。
この比較表(暗号化 vs ハッシング vs ソルト化)で、3つの手法の違いをすばやく確認してください。
最新情報を購読