エンコード、ハッシュ、暗号化はデータを変換しますが、同じ結果は作りません。エンコードは表現を変えます。ハッシュは固定長のハッシュを作ります。暗号化は鍵で読み取り可能な内容を保護します。出力が読めなく見えても、誤った操作は重大な失敗を起こすことがあります。
簡単な回答: 別のシステムが互換性のある表現を必要とする場合はエンコードを使います。繰り返し可能な指紋または完全性検査にはハッシュを使います。許可されたシステムが機密データを復元する必要がある場合は、認証付き暗号化を使います。Base64はエンコードであり、暗号化ではありません。
このガイドでは、目的、可逆性、鍵、アルゴリズム、失敗、例を比較します。それぞれの判断を、エンコードツール、ハッシュツール、暗号化ツールに結び付けます。
最も重要な違いは何ですか?
最も重要な違いは、約束する結果です。エンコードは正規化された表現を約束します。ハッシュは、アルゴリズムに依存する特性を持つ決定的なハッシュを約束します。暗号化は、アルゴリズム、モード、鍵、nonce、認証、実装が適切なら機密性を約束します。
| 操作 | 主な目的 | 可逆性 | 秘密鍵が必要 | 一般的な出力 | 例 |
|---|---|---|---|---|---|
| エンコード | データを転送または保存用に表現する | あり | いいえ | 構文が異なるテキストまたはバイト | Base64、16進数、パーセントエンコード |
| ハッシュ | 完全性または比較用の指紋を作る | 実質的に不可逆 | いいえ | 固定長のハッシュ | SHA-256、SHA-384、SHA-512 |
| 暗号化 | 許可されない読み取りを防ぐ | あり、正しい鍵が必要 | はい | 暗号文、nonce、タグ | AES-GCM、ChaCha20-Poly1305 |
見た目だけで操作は決まりません。Base64は偶然の文字列に見えても、誰でもデコードできます。16進数のハッシュは暗号文に見えても、元データを復元しません。暗号文は、転送用にBase64でエンコードできます。
エンコードとは何ですか?
エンコードは、公開された規則でデータを別の表現に対応付けます。システム間の互換性を作ります。秘密は必要ありません。スキーマを知るデコーダーは、有効な入力を元に戻せます。
Base64は、バイナリからテキストへの一般的なエンコードです。RFC 4648はBase16、Base32、Base64を定義します。アルファベット、パディング、正規の動作も定義します。Base64は、テキスト指向のシステムでバイトを転送します。バイトを隠しません。
Base64エンコーダーはビットをグループ化し、限られたアルファベットに対応付けます。パディングは最後のグループを補います。バリアントは別のアルファベットを使うことがあります。URLセーフBase64は問題のある文字を置き換えます。受信側はバリアントとパディング規則を知る必要があります。
16進エンコードは、各バイトを基数16の2文字で表します。確認とコピーが簡単です。別のラッピングの前に文字数を2倍にします。Base64は通常、より少ないテキストで済みますが、バイナリデータより大きくなります。
パーセントエンコードは、URLコンポーネント内のオクテットを表します。HTMLエンティティは、マークアップ内の特殊文字を表します。文字エンコード(UTF-8など)は、文字をバイトに対応付けます。どの操作も互換性を解決しますが、機密性は提供しません。
Base64 Encoder and Decoderで管理された入力を試せます。処理モデルを確認せずに、パスワード、鍵、規制対象データを入力しないでください。ブラウザー処理は一部の転送リスクを減らしますが、デバイスのセキュリティの代わりにはなりません。
Base64は暗号化ですか?
いいえ。Base64は公開された可逆の対応付けを使い、秘密鍵を使いません。テキストを持つ誰でもデコードできます。Base64は暗号文を包めますが、それだけでは機密性を提供しません。
この違いは、設定、Cookie、トークン、プロトコルで重要です。エンコードされた秘密は、保護が必要な秘密のままです。Base64を障壁と考えると、認証情報や個人データが露出することがあります。
ハッシュとは何ですか?
暗号学的ハッシュ関数は、可変長の入力を受け取り、固定長のハッシュを返します。同じ入力は同じハッシュを作ります。小さな変更は結果を大きく変えることが期待されます。安全性には、原像攻撃、第二原像攻撃、意図的な衝突攻撃への耐性も必要です。
NIST FIPS 180-4はSecure Hash Standardを定めます。SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256を含みます。「SHA-2」は1つのサイズではなく、ファミリーを示します。
直接の回答: 入力を復元せず、繰り返し可能な値が必要ならハッシュを使います。許可された当事者が復元する必要があるなら、暗号化を使います。
ファイルの公開者は、ダウンロードの横にハッシュを公開することがあります。ダウンロードしたバイトのハッシュを計算して比較します。一致は、公開値の元になったバイトとの同一性を示します。誰が公開したかは示しません。そのためには、認証された経路または署名が必要です。
SHA-2 Hash Calculatorは一般的な結果を計算します。All Hashes Generator(英語ページ)は複数のアルゴリズムを示します。出力を増やしても、弱いアルゴリズムは強くなりません。要件と適用標準に基づいてアルゴリズムを選びます。
ハッシュは一意の識別子ではありません
固定長のハッシュは、無限の入力集合を表します。そのため衝突が存在します。安全なハッシュは、有用な衝突を難しくしますが、不可能にはしません。
ハッシュを汎用の身元証明として使わないでください。アルゴリズム、入力の作り方、攻撃者、結果を評価します。古いハッシュは偶発的な損傷を検出できますが、攻撃者には破られることがあります。
Hash Analyzer(英語ページ)は、長さと構文からアルゴリズムを提案できます。値を作ったアルゴリズムを証明するものではありません。コンテキストが必要です。
パスワードのハッシュには特定の設計が必要です
一般的なハッシュは意図的に高速です。ファイル検査には役立ちますが、攻撃者が時間あたりに多くのパスワードを試せます。
パスワード保存には、そのために設計された関数または鍵導出が必要です。一意のsaltと、意図的に選んだコストを使う必要があります。管理されたパラメーター、安全な比較、移行、コピーの保護も必要です。NIST SP 800-63Bは最新の指針を提供します。
saltは秘密でなくてかまいません。同じパスワードが複数のアカウントで同じ検証値を作ることを防ぎます。pepperは別の要件を持つ別の秘密です。どちらもBase64を暗号化に変えず、saltなしの高速ハッシュを適切にしません。
チェックサムは常に暗号学的ハッシュではありません
チェックサムは偶発的な変更を検出します。CRCアルゴリズムは、転送エラーと保存エラーに適しています。通常、意図的な改ざんには耐えません。暗号学的ハッシュは、より強い特性を目指します。
選ぶ前に要件を定義します。偶発的なエラーにはチェックサムを使います。攻撃者がデータを変更できる場合は、暗号学的ハッシュまたはMACを使います。受信者が公開鍵で出所と完全性を確認する必要がある場合は、デジタル署名を使います。
暗号化とは何ですか?
暗号化は、鍵で平文を暗号文に変換します。復号は元の内容を復元します。安全なシステムには、正しい鍵生成、モード、nonce、認証、保存、ローテーション、アクセス制御も必要です。
NIST FIPS 197はAESを定めます。AESは128ビットブロックと、128、192、256ビットの鍵を使います。AESだけでは長いメッセージの暗号化方法を定義しません。動作モードがその構成を提供します。
認証付きモードは、機密性と変更検出を保護します。AES-GCMは一般的な例です。そのタグは、変更された暗号文または関連データを拒否できます。認証なしの暗号化は、情報を漏らしたり、攻撃者が制御した変更を受け入れたりすることがあります。
NIST SP 800-38DはGCMとGMACを定義します。nonceの要件は重要です。同じGCM鍵でnonceを再利用すると、セキュリティが壊れることがあります。システムが状態を管理しない場合、インターフェースはセッション間の再利用を防げません。
学習と管理された変換にはAES Encryption(英語ページ)を使えます。ブラウザーツールは完全な鍵管理システムではありません。本番の暗号化には、検証済みのプロトコルと保護されたライフサイクルが必要です。
対称暗号化と非対称暗号化
対称暗号化は、共有された秘密鍵を使います。同じ鍵または関連する鍵で暗号化と復号を行います。AESは対称です。効率的ですが、当事者は鍵を安全に共有して保存する必要があります。
非対称暗号化は、公開鍵と秘密鍵のペアを使います。適切な方式では、公開鍵で秘密鍵の所有者向けに暗号化できます。公開鍵暗号は署名にも使えますが、署名は暗号化ではありません。
多くのプロトコルは両方を組み合わせます。公開方式は、一時的な対称鍵を確立または保護します。認証付き対称暗号化はデータを保護します。プロトコルは当事者も認証し、コンテキストを結び付け、リプレイを防ぎます。
鍵、証明書、トークンのコレクションに関連ツールがあります。証明書は署名チェーンで身元を公開鍵に結び付けます。JWTは署名または暗号化できます。Base64urlセグメントがあるだけでは秘密になりません。
保存データと転送中のデータの暗号化
保存データの暗号化は、脅威モデルに基づいてデータを保護します。ディスク暗号化は、電源オフのデバイスを失った場合に役立ちます。フィールド暗号化は、一部のデータ経路を制限します。コピー、ログ、エクスポート、インデックス、キャッシュには個別の検査が必要です。
転送中の暗号化は、エンドポイント間の通信を保護します。TLSは一般的なWebの例です。許可されたエンドポイントが復号した後のデータは保護しません。拡張機能、侵害されたデバイス、ログ、許可された利用者は、平文にアクセスできます。
範囲を示さずに「暗号化済み」と言うのは不完全です。どのデータを保護するか、どこで暗号化が始まり終わるか、誰が鍵を管理するか、どの攻撃者を想定するかを確認します。
Message Authentication Codeはどこに入りますか?
Message Authentication Code(MAC)は、秘密鍵で完全性と、共有鍵を持つ当事者間の認証を保護します。HMACは、特定の構成で暗号学的ハッシュを組み合わせます。単純なハッシュではなく、内容を暗号化しません。
NIST FIPS 198-1はHMACを定めます。鍵を持つ受信者は、メッセージとタグが一致するか確認できます。タグはメッセージを復元しません。共有鍵で検証できる人は、有効なタグも作れます。
メッセージを見せてもよいが、当事者間の変更を検出する必要がある場合はMACを使います。機密性も必要なら、認証付き暗号化を使います。公開鍵で検証する必要があるなら、署名を使います。
デジタル署名はどこに入りますか?
デジタル署名は、秘密鍵で署名し、公開鍵で検証します。認証と完全性を目的とします。一部のシステムでは否認防止にも役立ちます。署名した内容を隠しません。
署名は、構造化された表現またはハッシュに対して行われることが多いです。2つのシーケンスが似た表示可能データを表すことがあるため、正規化が重要です。プロトコルは、アルゴリズム、コンテキスト、識別子、有効期限も結び付ける必要があります。
NIST SP 800-175Bは連邦暗号標準を説明します。開発者は、保守されたライブラリと確立されたプロトコルを使うべきです。単独の出力からプリミティブを組み立てるべきではありません。
これらの操作はどのように連携しますか?
安全なアプリケーションは、決められた順序で複数の変換を使うことがあります。JSONで転送する暗号化メッセージを考えます。
- アプリケーションは平文を正確なバイト列にシリアライズします。
- 認証付きアルゴリズムは、鍵とnonceで暗号文とタグを作ります。
- Base64urlは、JSONがバイナリフィールドを転送できるようにエンコードします。
- 受信者はBase64urlをデコードし、その後で認証付き復号を実行します。
- 認証に失敗した場合、受信者はメッセージを拒否します。
エンコード層は表現を提供します。暗号化層は機密性と完全性を提供します。エンコードだけを元に戻しても、平文ではなく暗号文が表示されます。認証を省略すると、設計は無効になります。
別の処理では、公開ファイルのハッシュを計算し、ハッシュに署名し、署名をBase64でエンコードできます。ハッシュは固定長の入力を作ります。署名はそれを秘密鍵に結び付けます。Base64は署名をテキストとして転送できるようにします。各手順の約束は異なります。
選択の手引き
出力の見た目ではなく、必要な結果から始めます。
| 要件 | 方法 | 重要な条件 |
|---|---|---|
| バイナリバイトをテキストフィールドに入れる | エンコード | 両方のシステムがバリアントを合意する |
| ファイルを信頼できるハッシュと比較する | 暗号学的ハッシュ | 信頼できるソースからハッシュを取得する |
| 秘密を持つ当事者間の変更を検出する | MAC | 共有鍵を保護してローテーションする |
| 内容を隠し、変更を検出する | 認証付き暗号化 | 鍵とnonceの規則に必ず従う |
| パスワード検証値を保存する | パスワードハッシュまたはKDF | 一意のsaltと適切なコストを使う |
| 公開者の検証を可能にする | デジタル署名 | 秘密鍵を保護し、身元を確認する |
| 偶発的なエラーを検出する | チェックサム | 攻撃者への耐性を主張しない |
許可されたシステムが入力を復元する必要がある場合、不可逆ハッシュは誤りです。機密性が不要なら、暗号化は不要な鍵リスクを追加することがあります。互換性だけが必要なら、文書化されたエンコードと別のセキュリティ制御を使います。
よくある間違い
間違い1:読めないテキストを安全だと考える
ランダムに見える出力は何も証明しません。Base64、16進数、圧縮データ、ハッシュ、暗号文は見慣れないことがあります。操作と特性を識別します。
間違い2:認証なしで暗号化する
機密性は、暗号文が変更されていないことを証明しません。確立された認証付き構成を優先します。平文を使う前にタグを確認します。
間違い3:nonceまたは初期化ベクトルを再利用する
要件は、アルゴリズムとモードに依存します。固有性を求めるものも、予測不能性を求めるものもあります。誤った再利用は、テキスト間の関係または認証鍵を露出させることがあります。
間違い4:鍵を暗号文の横に保存する
データの横に鍵を置くと、脅威の境界が失われることがあります。適切な秘密管理または鍵管理システムを使います。アクセスを制限し、操作を記録し、鍵をローテーションし、復旧を計画します。
間違い5:低エントロピーの秘密に高速ハッシュを使う
攻撃者は、短い値または一般的な値をオフラインで試せます。専用のパスワード構成を使います。最新のプラットフォームとセキュリティの指針に従います。
間違い6:侵害された同じソースのハッシュを信頼する
ファイルを置き換えた攻撃者は、近くにあるハッシュも置き換えられます。署名付きマニフェスト、信頼できる経路、独立した認証済みソースを使います。
間違い7:新しい暗号プロトコルを設計する
安全なプリミティブも、安全でない組み合わせで失敗することがあります。重要なシステムでは、検証済み標準、成熟したライブラリ、安全な値、専門家のレビューを優先します。
ブラウザーツールを使う安全な手順
ブラウザーツールは、学習、形式変換、診断、検査に役立ちます。管理されたデータで次の手順を使います。
- 表現、完全性、認証、機密性のどれが必要か決めます。
- 例から本番の秘密と個人データを削除します。
- 操作に対応する特定のツールを選びます。
- アルゴリズム、アルファベット、モード、パディング、出力エンコードを確認します。
- 未知の結果を信頼する前に、既知の例をテストします。
- 独立した検査に合格するまで元データを保持します。
- 本番コードでは、保守されたライブラリを使います。
Tool Factoryのルートは、学習と正確な操作を結び付けます。Base64から始め、ハッシュ形式(英語ページ)を確認し、SHA-2ハッシュを計算し、AES(英語ページ)を調べます。各ページは目的と代替手段を示します。
よくある質問
ハッシュは暗号化の代わりになりますか?
いいえ。ハッシュは入力を復元しません。指紋と適切な完全性の用途に使います。許可された復元が必要なら暗号化を使います。
暗号化はハッシュの代わりになりますか?
すべての場合には使えません。暗号化には鍵管理が必要で、同じテキストでも異なる出力を作ることがあります。ハッシュは鍵なしで安定した値を作ります。認証付き暗号化には完全性が含まれますが、アクセスモデルは異なります。
SHA-256は暗号化ですか?
いいえ。SHA-256はSHA-2ファミリーに属します。256ビットのハッシュを作り、復号鍵を持ちません。
AESはハッシュですか?
いいえ。AESは対称ブロック暗号です。アプリケーションはモードまたは構成を介して使います。AES-GCMは、正しく実装すれば認証付き暗号化を提供できます。
Base64はデータサイズを減らしますか?
いいえ。Base64は通常、限られたテキストアルファベットでバイトを表すため、データを大きくします。圧縮は別の操作で、Base64より前に行うことが多いです。
APIトークンを保護する方法は何ですか?
システムによって異なります。TLSでトークンを転送します。秘密管理システムに保存します。アクセスを制限してローテーションします。元を復元する必要がなければ、ハッシュで検証できます。エンコードには保護機能がありません。
最も安全な暗号化アルゴリズムはどれですか?
名前だけで安全なシステムを保証するものはありません。保守されたライブラリで、最新の認証付き構成を使います。鍵、nonce、タグ、エラーの規則に従います。プロトコル全体と脅威モデルを評価します。
最終的な選択規則
エンコードは表現を変えます。ハッシュは不可逆の値を作ります。暗号化は鍵で復元可能な内容を保護します。MACと署名は、単純なハッシュにはない認証モデルを追加します。
選ぶ前に必要な特性を書き出します。その後、最新の標準、保守された実装、管理された鍵ライフサイクルを選びます。ブラウザーツールは学習と限定的な変換に使います。本番のセキュリティには、検証済みプロトコルを使います。