Security
セキュリティに関するあれこれ。
暗号技術は当事者間の通信を秘匿する目的で歴史的に古くから使用されてきた。現代においても以下のセキュリティ機能によってデジタル社会の多くの問題を解決することのできる重要なサービスである。
- 機密性 (confidentiality) - 意図した受信者だけがそのメッセージを読むことができることを保証する。
- 認証 (authentication) - 通信相手が正しいことを保証する。
- 完全性 (integrity) - 受信したメッセージが改変されていないことを保証する。
- 否認防止 (non-repudiation) - メッセージの送信者がそれを否認することができないことを保証する。
暗号と証明
暗号プリミティブ
ハッシュ関数
ハッシュ関数 (hash function) は任意長のビット列をある固定の長さのビット列に変換する関数。この操作は \(h\) は数学記号で \(h: \{0,1\}^* \to \{0,1\}^k=\{0,\ldots,2^k-1\}\) と記述することができる。…
電子署名
電子署名 (digital signature) は文書に対する承認と、文書内容の保障を電子的に付け加えるための暗号技術。公開鍵を使用することにより他人によって行われた署名でないことと、署名された時点から文書内容に変更がないことの 2 点を証明することができる。…
暗号プリミティブのパフォーマンス比較
共通鍵暗号
鍵共有アルゴリズム
暗号技術における鍵共有 (key exchange) とは、共通の秘匿情報を持たない当事者間で公にされている情報のみを用いて、すべての当事者サイドで通信内容を保護するための共通の鍵を生成する方法。…
メッセージ認証コード
メッセージ認証コード (MAC; message authentication code) はメッセージの完全性を認証付きで保証する暗号学的手法である。鍵の所有者 \(A\) によりメッセージが発行されてから破損や改ざんを受けていないことを同じ鍵の所有者 \(B\) が検証することができる (\(A\) と \(B\) は同一でも良い)。…
鍵導出アルゴリズム
鍵導出 (key derivation) は 1 つの秘密から複数の秘密を導出する手法である。より具体的には、ある鍵素体 (key material) から暗号論的強度を持つ 1 つ以上の秘密鍵を決定論的に導出するために用いられる。…
応用暗号
秘密分散共有
秘密分散共有 (secret sharing) または単に秘密分散は秘密情報 \(S\) を \(n\) 個の分散情報に符号化する暗号化アルゴリズムの一種。特に (k,n) しきい値法では \(n\) 個の分散情報のうち任意の \(k\) 個が揃えば元の秘密情報 \(S\) を再構築することができる (\(k\) 個に満たない場合は再構築することができない)。…
Verifiable Random Function
VRF (verifiable random function) は公開鍵ペアを使用する暗号学的ハッシュ関数である。VRF 関数は秘密鍵を使ってある入力値に対するハッシュ値を算出することができる。…
準同型暗号
準同型暗号 (homomorphic encryption; HE) は暗号化したデータを復号化せず演算することで、復号化により計算結果を得ることができる暗号スキーム。データの内容を秘匿したままクラウドのようなサードパーティの計算リソースを使用することができる。…
ゼロ知識証明
ゼロ知識証明 (ZKP; zero-knowledge proof) は、ある命題 (statement) が真であるという証明者 (prover) の主張を、それ以上の情報を明かすことなく検証者 (verifier) が確実に知る (受理する/拒否する) ことのできるスキームである。…
Merkle Tree
マークルツリー (Merkle tree; ハッシュ木) はあるデータセットのハッシュ値を再帰的にハッシュ化することで得られるツリー構造。このツリーのルートにあたるルートハッシュはすべてのデータのハッシュ特性を含んだ固定サイズの値であるため、後で一部のデータを検証するのに都合が良い。…
ホワイトボックス暗号
ホワイトボックス暗号 (white-box cryptography; WBC) は攻撃者が暗号プリミティブの実装やその実行プラットフォームに対して特権的アクセスを持つ状況においても暗号鍵そのものの漏洩 (つまり鍵復元) を防止することを目的とした難読化 (obfuscation) の手法である。…
公開鍵暗号アルゴリズム
公開鍵暗号 入門
異なる鍵 A と B が存在した場合、A で暗号化したデータが B でしか復号化できないといった特殊な鍵の組み合わせを非対称鍵 (asymmetric key) と言う。公開鍵暗号 (public-key encryption) は非対称鍵の特性を利用して鍵の片方を暗号化用に相手に公開し (公開鍵)、もう片方を復号化用に非公開にしておく (秘密鍵) 方式。…
公開鍵暗号アルゴリズム
公開鍵は「A から B を計算するのは容易だが B から A を計算するのは困難」といった計算の非対称性を利用した暗号アルゴリズム。公開鍵アルゴリズムを応用した技術として鍵共有、暗号、電子署名が広く使われている。…
秘匿マルチパーティ計算
紛失通信
紛失通信 (oblivious transfer; OT) は送信者の送信する \(n\) 個のデータのうち受信者が \(k\) 個を受信できる二者間の通信プロトコル。ここで送信者は \(n\) 個のうちのどの \(k\) 個が受信されたかを知ることができず、受信者は \(k\) 個以外のデータを知ることができないという暗号論的な性質を持つ。…
秘匿共通集合
秘匿共通集合 (PSI; private set intersection) は 2 つパーティ \(P_a\) と \(P_b\) がそれぞれで保持しているデータ集合 \(A\), \(B\) の共通集合 (交差) \(A \cap B\) を特定できる暗号技術。…
E2E 暗号
TEE
ハイブリッド暗号
プライベート認証局
Secure Sockets Layer
SSL (secure sockets layer) は公開鍵暗号と共通鍵暗号、電子署名、公開鍵証明書などの技術を組み合わせ、暗号化による盗聴防止、改ざん・破損の検出、通信相手の証明などを一度に実現している通信技術。…
OpenSSL リファレンス
複雑な OpenSSL コマンドを目的別にまとめる。
Mix Network
Mix Network は受信者のみが解読できる暗号でメッセージを秘匿し、さらにランダムに選んだ多段のノードで中継させることでメッセージの発信者や伝達経路と通信内容の両方を秘匿することを目的としたネットワーク。…
ポスト量子暗号
ポスト量子暗号
ポスト量子暗号 (PQC; post-quantum cryptography) は量子計算耐性を持つ暗号アルゴリズムのこと。現在広く使用されている暗号アルゴリズムの多くは素因数分解問題 (RSA など)、または離散対数問題 (楕円曲線や BLS など) の困難性に基づいている。…
ハッシュベース暗号
ハッシュベース暗号 (hash-based cryptography) は素因数分解や離散対数のような数学的な問題の困難性を利用するのではなく、暗号論的ハッシュ関数によって確立されるセキュリティに基づいている。…
格子暗号
格子暗号 (lattice-based cryptography) は多次元の格子構造を用いた公開鍵暗号スキーム。証明可能な強力なセキュリティの保証や量子計算耐性、完全準同型暗号へ応用可能といった特性を持っている。…
論文翻訳
論文翻訳: Short Signatures from the Weil Pairing
Gap Diffie-Hellman 群でのヴェイユペアリングを使用することで、一般的な RSA や DSA での署名と比べて同じ強度で短い署名を生成する方法を示す 2001 年の論文。
論文翻訳: Aggregate and Verifiably Encrypted Signatures from Bilinear Maps
GAP Diffie-Hellman と双線形写像を使用して BLS 署名派生スキーム、集約署名、ブラインド署名、リング署名を紹介する 2003 年の論文。集約署名は異なるユーザによる異なるメッセージに対する署名を単一の署名に集約する
論文翻訳: Compact Multi-Signatures for Smaller Blockchains
マルチ署名、公開鍵集約を使用してブロックチェーンサイズを小さくするための 2018 年の論文。
論文翻訳: Practical Threshold Signatures
RSA に基づく非インタラクティブな署名分散の方法についての 1999 年の論文。
論文翻訳: Threshold Signatures, Multisignatures and Blind Signatures Based on the Gap-Diffie-Hellman-Group Signature Scheme
(8) の Gap Diffie-Hellman 群を 1) BLS 署名を秘密分散のスキームに拡張したしきい値署名、2) 複数の署名分散から一つの署名を作成するマルチ署名、3) メッセージを秘匿するブラインド署名のそれぞれに応用した 2002 年の論文。…
論文翻訳: Verifiable Random Functions
翻訳: Verifiable Random Functions (VRFs)
Verifiable Random Functions (VRF) は公開鍵をキーとする暗号化ハッシュのバージョンである。秘密鍵の所有者のみがハッシュを算出できるが、公開鍵を持つ人であれば誰でもハッシュの正当性を検証できる。…
論文翻訳: Curve25519: new Diffie-Hellman speed records
通常の楕円曲線アルゴリズム (EC) より高速で鍵の小さい Curve25519 を使用した暗号計算に関する 2006 年の論文。
論文翻訳: High-speed high-security signatures
楕円曲線暗号アルゴリズムの一種であるエドワーズ曲線デジタル署名 (EdDSA; ed25519, ed448) の速度やセキュリティ優位性に関する 2011 年の論文。
RFC翻訳: Edwards-Curve Digital Signature Algorithm (EdDSA)
論文翻訳: Quadratic Span Programs and Succinct NIZKs without PCPs
論文翻訳: Pinocchio: Nearly Practical Verifiable Computation
論文翻訳: On the Size of Pairing-based Non-interactive Arguments\(\star\)
2016 年の論文。
論文翻訳: On Span Programs
Span Program に関する 1993 年の論文。
論文翻訳: Fast Multiparty Threshold ECDSA with Fast Trustless Setup
論文翻訳: Bulletproofs: Short Proofs for Confidential Transactions and More
高速でデータサイズの小さいレンジプルーフ (範囲証明) のゼロ知識証明である Bulletproofs に関する 2018 年の論文。
論文翻訳: On White-Box Cryptography
white-box 暗号について Q&A 形式で解説する 2008 年の論文。発表当時の状況に依存する記述も多いので現状どうなっているかは追加で知る必要がある。
論文翻訳: WHITE-BOX CRYPTOGRAPHY: HIDING KEYS IN SOFTWARE
ホワイトボックス暗号に関する概要と 2012 年時点の現状をサーベイした論文。
TRANSCRIBE: Completeness Theorems for Non-Cryptographic Fault-Tolerant Distributed Computation
A 1988 paper on Secure multi-party computation. A transcription of an old PDF for the purpose of reading it in machine translation.
TRANSCRIBE: Non-Interactive Oblivious Transfer
A 1990 paper on non-interactive oblivious transfer. A transcription of an old PDF for the purpose of reading it in machine translation.
仕様翻訳: SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions - 転置に基づくハッシュ関数と拡張可能出力関数
暗号論的ハッシュ関数である SHA-3、および可変長出力が可能な SHAKE に関する 2015 年の NIST 仕様。
RFC翻訳: HMAC-based Extract-and-Expand Key Derivation Function (HKDF)
ある秘密鍵に基づいて複数の鍵を生成するスキームを規定している RFC 5869 についての仕様文書。