Week 1
参照先: https://github.com/privacy-scaling-explorations/core-program/blob/main/2024/week1_cryptographic_basics.md
対称暗号と非対称暗号 (Symmetric & Asymmetric Cryptography)
対称暗号化アルゴリズムは、暗号化機能と復号化機能の両方を実行するために同じ鍵を使用します。
非対称暗号化アルゴリズムは、暗号化に使用される鍵は公開鍵と呼び、復号化に使用される鍵を秘密鍵と呼びます。
公開鍵と暗号鍵は、数学的の関係性を持ちます。
AES (Advanced Encryption System)
AESは対称暗号の一種。鍵生成、暗号化、復号化の三つのアルゴリズムで定義される。
例:Aliceは機密データをBobに安全に送信したい。
非対称暗号: RSA (Rivest Shamir Adleman)
RSAは非対称暗号の一種。鍵生成、鍵共有、暗号化、復号三つのアルゴリズムで定義される。
例:BobはAliceに、危険な環境で安全に秘密を伝えたい。
ハッシュ関数 (Hash Function)
SHA256 (Secure Hash Algorithm)
マークルツリー (Merkle Tree)
デジタル署名 (Digital Signature): Schnorr署名 (Schnorr Signature)
デジタル署名とは、非対称暗号を利用し、電子文書に対し暗号を用いた署名を付与することで、その電子文書が作成名義人によって作成されたこと、そして作成されて以降が改変されていないことを証明する技術です。
例: AliceはBobへあるメッセージ を送信し、そのメッセージが自分から作成し、改変されていないことを証明したい。
離散対数に基づく公開鍵暗号学: Diffie-Hellman 鍵交換 (Diffie-Hellman Key Exchange)
AliceとBobの間、事前の秘密の共有無しに、盗聴の可能性のある通信路を使って、共通暗号鍵を構築する方法です。共通公開鍵を生成する過程までは非対称暗号を利用し、その後の交流は共通暗号鍵に基づく対照暗号を利用します。
Elgamal暗号化 (Elgamal Encryption)
コミットメント (Cryptographic Commitment)
Cryptographic Commitmentは、ある値を選択し、その選択を固定しつつ、後で公開するまでその値を秘密にしておく方法です。簡単に言えば、デジタルの世界での封筒のようなものです。
コミットメントには、主に2つの重要な特性があります。
Binding(拘束性): 一度コミットした値を後から変更することはできません。これは、封筒に入れた手紙を後から書き換えられないのと同じです。
Hiding(隠蔽性): コミットメントを受け取った人は、それが開示されるまで中身を知ることができません。これは、封筒を開けるまで中身が分からないのと同じです。
コミットメントの分かりやすい例として、AliceとBobがオンラインでコイントスをするアプリケーションを考えてみましょう。
アリスがコインの表裏を予想し、その予想をコミットメントとして送信します。
ボブがコインを投げ、結果を発表します。
アリスが自分の予想を公開し、コミットメントを開示します。
ボブはアリスの予想がコミットメントと一致するか確認します。
これにより、お互いに不正ができない公平なコイントスが実現できます。
Cryptographic Commitmentは、ゼロ知識証明においても重要な役割を果たします。Prover(証明者)は、証明の一部をコミットメントとして事前に提示し、後でVerifier(検証者)の選択に応じて必要な情報だけを開示することができます。
また、Lamport署名方式など、一部のデジタル署名システムでもCryptographic Commitmentが使用されています。署名者は秘密の値にコミットし、後で部分的に公開することで署名を生成します。
さらに、MPC(マルチパーティ計算)においてもCryptographic Commitmentは重要な役割を果たしています。
入力の確定: 参加者は自身の入力にコミットすることで、計算途中で入力を変更できないようにします。
計算の公平性: 全ての参加者が入力を提供した後にのみ計算が進行することを保証します。
検証可能性: 計算過程や結果の正当性を検証する際に、コミットメントが重要な役割を果たします。
Pedersenコミットメント (Pedersen Commitment)
Cryptographic Commitmentを実現する高度なコミットメントスキームの一つとしてPedersen Commitmentがあります。
Pedersen Commitmentは以下のような手順で機能します:
セットアップ:
大きな素数位数を持つ群を選びます。
その群の中から二つの生成元をランダムに選びます。
は公開パラメータとなります。
コミットメントの生成:
コミットしたい値と、ランダムな値(からの範囲)を選びます。
コミットメントを計算します。
を公開します。
コミットメントの開示と検証:
後で、とを公開します。
検証者はを確認します。
また、Pedersen Commitmentには、以下のような特徴があります:
Binding(拘束性): コミットメントを生成した後、異なる値とで同じを生成することは計算量的に不可能です。
Hiding(隠蔽性): コミットメントからの情報を得ることは、離散対数問題を解くのと同じくらい困難です。
準同型性: 二つのコミットメントとがあるとき、となります。これは、コミットメントを開示せずに加算操作ができることを意味します。
ハッシュベースのコミットメントスキーム(例:)と比較すると、Pedersen Commitmentには以下のような利点があります:
無条件の隠蔽性: 計算能力に関係なく、からの情報を得ることは不可能です。
準同型性: コミットメントを開示せずに、加算などの演算が可能です。
一方で、Pedersen Commitmentは離散対数問題の難しさに依存しているため、将来的に量子コンピュータなどでこの問題が解決されると、Binding性が失われる可能性があります。
楕円曲線暗号 (Elliptic Curve Cryptography)
楕円曲線暗号は、有限体上の楕円曲線の整数点の集合をアーベル群として利用した非対称暗号です。
RSAと比べると、同じビット数のセキュリティーに対して、鍵の大きさが小さいメリットがあり、計算の効率化が重視されています。
ECDSA (Elliptic Curve Digital Signature Algorithm)
Schnorr署名と似ているようなデジタル署名であるが、利用している群を整数乗法群から有限体上の楕円曲線の整数点の集合群に切り替えたと認識した方が理解しやすいかと思います。
例: AliceはBobへあるメッセージ を送信し、そのメッセージが自分から作成し、改変されていないことを証明したい。
BLS署名 (Boneh-Lynn-Shacham Signature)
ペアリング暗号 (Pairing Based Cryptography)
Last updated