暗号技術についてのメモです。
共通鍵暗号
暗号化と復号に同じ鍵(秘密鍵: secret key)を使用する方式です。 公開鍵暗号と比較して処理が高速であるため、大量のデータを暗号化する場面で広く使われています。
ブロック暗号
ブロック暗号は、共通鍵暗号の一種で、データを一定サイズのブロック(64 bit や 128 bit)に分割してから暗号化する方式です。 高速な暗号化処理を行えるため、広く利用されています。
- Triple DES (3DES) - 1990年代。 64 bit のブロック暗号 DES (Data Encryption Standard) を 3 回繰り返す暗号化アルゴリズム。 かつては米国政府標準暗号だったが、現在は AES への移行が推奨されている。
- MISTY1 - 1990年代。 三菱電機が開発した 128 bit 暗号鍵を持つ 64 bit ブロック暗号アルゴリズム。
- CAST-128 - 64 bit ブロック暗号。
- Camellia - 2000年代。 128 bit ブロック暗号。 NTT・三菱電機が共同開発。 AES と同等の安全性を持ち、日本発の暗号として国際的にも採用されている。
- AES: Advanced Encryption Standard - 2000年代。 128 bit ブロック暗号。 ベルギーの暗号学者が設計した Rijndael アルゴリズムをベースとしており、現在最も広く使われている共通鍵暗号の標準規格。
- SEED - 128 bit ブロック暗号。 韓国の情報保護振興院 (KISA) が開発。
国際標準のブロック暗号 (ISO/IEC 18033-3) は、Camellia、AES、SEED、CAST-128、MISTY1、Triple DES。
ストリーム暗号
ストリーム暗号は、共通鍵暗号の一種で、データを 1 bit または 1 byte 単位で逐次暗号化する方式です。 ブロック暗号がデータを一定サイズのブロックにまとめて処理するのに対し、ストリーム暗号はデータの流れ(ストリーム)に沿ってリアルタイムに処理できるため、通信データの暗号化に適しています。
- MUGI - NTT が開発した 128 bit 鍵のストリーム暗号。
- MULTI-S01 - 日立製作所が開発。 暗号化と同時にメッセージ認証を行える。
- SNOW - スウェーデンの Lund 大学で開発されたストリーム暗号。
国際標準のストリーム暗号 (ISO/IEC 18033-4) は、MUGI、MULTI-S01、SNOW。
公開鍵暗号
暗号化に公開鍵 (public key)、復号に秘密鍵 (private key) を使用する方式です。 共通鍵暗号と比較して処理速度は遅いですが、鍵の配送問題を解決できるという大きな利点があります。 実際のシステムでは、公開鍵暗号で共通鍵を安全に交換し、データ本体は高速な共通鍵暗号で暗号化するという「ハイブリッド暗号」方式がよく使われています。
- RSA: Rivest-Shamir-Adleman - 2 つの大きな素数の積(合成数)を素因数分解することが計算上困難であるという性質に基づいた暗号方式。 暗号化と電子署名の両方に利用できる。
- DSA: Digital Signature Algorithm - 米国政府標準の電子署名アルゴリズム。 RSA とは異なり、署名専用であり暗号化には使用できない。
楕円曲線暗号
楕円曲線上での離散対数問題に基づいた公開鍵暗号方式です。 RSA と比較して、より短い鍵長で同等の安全性を実現できるため、リソースが限られる環境(モバイルデバイスや IoT 機器など)で広く採用されています。
- PSEC-KEM: Provably Secure Elliptic Curve encryption - Key Encapsulation Mechanisms - NTT が開発。
- ECDSA: Elliptic Curve Digital Signature Algorithm - DSA を楕円曲線暗号に適用した電子署名アルゴリズム。 Bitcoin などの暗号通貨でも採用されている。
国際標準の公開鍵暗号 (ISO/IEC 18033-2) は、ACE-KEM、ECIES-KEM、PSEC-KEM、RSA-KEM、RSA-OAEP、HIME(R)。
参考: NTT 技術ジャーナル 2005.12
暗号アルゴリズムの使用期限

米国の国立標準技術研究所 (NIST) が提示する鍵の長さとその使用期限は、世界最高レベルのスーパーコンピューターを使っても解読に何十年もかかるかどうかが基準になっています。 コンピューターの性能向上に伴い、かつて安全とされていた暗号アルゴリズムや鍵長が陳腐化していくため、定期的に見直しが行われています。
ハッシュ関数(メッセージダイジェスト)
ハッシュ関数は、任意の長さのデータから固定長のハッシュ値(ダイジェスト)を生成する一方向関数です。 データの改ざん検知やパスワードの保存などに利用されます。 同じ入力からは常に同じハッシュ値が得られますが、ハッシュ値から元のデータを復元することは計算上困難です。
- MD5 (Message Digest 5) - 128 bit のハッシュ値を生成する。 衝突攻撃(異なる入力から同じハッシュ値を生成する攻撃)に対する脆弱性が発見されており、セキュリティ用途では非推奨。
- SHA-1 (Secure Hash Algorithm 1) - 160 bit のハッシュ値を生成する。 MD5 の後継として広く使われたが、2017 年に衝突攻撃が実証され、現在はセキュリティ用途では非推奨。
- SHA-2 - SHA-1 の後継で、SHA-224、SHA-256、SHA-384、SHA-512 などのバリエーションがある。 現在最も広く使われているハッシュ関数。
- SHA-3 - Keccak アルゴリズムをベースとした、SHA-2 とは異なる設計のハッシュ関数。 SHA-2 のバックアップとして 2015 年に NIST が標準化した。
メッセージ認証コード (MAC)
MAC (Message Authentication Code) は、メッセージの完全性と送信者の認証を同時に検証するための仕組みです。 ハッシュ関数とは異なり、秘密鍵を使って認証タグを生成するため、鍵を知らない第三者は正しい MAC を生成できません。
- HMAC (Hash-based MAC) - ハッシュ関数(SHA-256 など)を利用した MAC。 API 認証や JWT (JSON Web Token) の署名などで広く使われている。
- CMAC (Cipher-based MAC) - ブロック暗号(AES など)を利用した MAC。
暗号鍵管理方式
暗号通信を行うためには、通信相手と安全に鍵を共有する必要があります。 以下は代表的な鍵管理・鍵交換の方式です。
- DH: Diffie-Hellman 鍵交換 - 1976 年に Whitfield Diffie と Martin Hellman が発表した、公開鍵暗号の概念に基づく鍵交換プロトコル。 通信路が盗聴されていても、安全に共通鍵を共有できる。
- KPS: Key Predistribution System(鍵事前配布方式)- 通信に先立って、信頼できるセンターが各ユーザーに秘密情報を配布しておく方式。
その他、暗号関連用語
- シーザー暗号(換字式暗号)
- 文字をずらすだけの最も古い暗号の一つ。
紀元前 1 世紀に、ローマ帝国のジュリアス・シーザー(ガイウス・ユリウス・カエサル: Gaius Julius Caesar)が考案しました。
ガリア戦争において軍事的な通信手段として用いられましたが、アルファベットを 3 文字分ずらすだけの単純なものでした。
カエサル暗号、シフト暗号とも呼ばれます。 あるいはカエサル・サイファー、シフト・サイファーとも呼ばれます。 サイファー (cipher) というのは、各文字を他の文字に置き換える暗号化方式の総称です。
- DES: Data Encryption Standard
- 1970 年代に米国の国家安全保障局 (NSA) と IBM 社が共同で開発した標準暗号化規格。 1977 年に米国商務省標準局(現 NIST)が連邦政府標準規格として制定しました。 56 bit の鍵長を持つブロック暗号ですが、現在ではコンピューターの性能向上により安全性が不十分とされ、後継の AES に置き換えられています。
- RSA 暗号方式
- 1977 年に MIT の Ron Rivest、Adi Shamir、Leonard Adleman の 3 名が発表した公開鍵暗号方式。 RSA という名前は、3 名の頭文字から命名されています。 RSA は公開鍵暗号方式であり、従来の DES のような共通鍵暗号における鍵配送の問題を解決しています。
- PGP: Pretty Good Privacy
- 1991 年にフィル・ジマーマン (Phil Zimmermann) が開発した暗号化ソフトウェア。 一般的にはメール暗号化プログラムとして認知されており、PGP 暗号メールという文脈で使われました。 A さんから B さんにメールを送信するときは、B さんが公開した公開鍵を使って A さんがメールを暗号化して送信します。 B さんは受信したメールを、自身の秘密鍵で復号します。
- ステガノグラフィ (steganography)
- メッセージの存在自体を隠すタイプの秘匿通信技術。 ギリシャ語の「ステガノス(覆う)」と「グラペイン(書く)」に由来します。 暗号(クリプトグラフィ)がメッセージの内容を隠すのに対し、ステガノグラフィはメッセージの存在そのものを隠します。 例えば、画像や音声ファイルの中にデータを埋め込む電子透かし (digital watermarking) はステガノグラフィの一種です。
- クリプトグラフィ (cryptography)
- 暗号技術の総称。 ギリシャ語の「クリプトス(隠された)」に由来します。