Information Security

  1. 1. 情報セキュリティ
    1. 1.1. 情報セキュリティの目的
    2. 1.2. 情報セキュリティのマネージメント
    3. 1.3. セキュリティポリシー
    4. 1.4. 情報セキュリティ基本方針
    5. 1.5. 情報セキュリティ管理策の分類
    6. 1.6. 情報セキュリティの運用
    7. 1.7. 情報資産
    8. 1.8. セキュリティに関わる脅威
      1. 1.8.1. リスク分析の手法
      2. 1.8.2. 脅威の種類
        1. 1.8.2.1. 不正攻撃
        2. 1.8.2.2. 侵入
        3. 1.8.2.3. マルウェア(malware)
        4. 1.8.2.4. Webアプリケーションの脅威
        5. 1.8.2.5. 盗聴・改ざん・なりすまし
        6. 1.8.2.6. 人を対象にした攻撃
    9. 1.9. 情報セキュリティの脆弱性
    10. 1.10. セキュリティ技術的対策6階層
    11. 1.11. 情報セキュリティ強化に必要な要素
      1. 1.11.1. 情報セキュリティ技術と法制度
  2. 2. 暗号システムの基礎
    1. 2.1. 暗号(Cryptography)
    2. 2.2. 暗号系(Crypto System)
      1. 2.2.1. 実用的な暗号系
    3. 2.3. 古典暗号
      1. 2.3.1. 換字暗号(Substitution Cipher)
        1. 2.3.1.1. 平文・暗号文
        2. 2.3.1.2.
        3. 2.3.1.3. 暗号化・復号関数
        4. 2.3.1.4. 換字暗号の例
      2. 2.3.2. 転置暗号(Permutation Cipher)
        1. 2.3.2.1. 平文・暗号文
        2. 2.3.2.2.
        3. 2.3.2.3. 暗号化・復号関数
        4. 2.3.2.4. 転置暗号の例
    4. 2.4. 安全性
      1. 2.4.1. 安全性の考え方
    5. 2.5. 情報理論的安全性
      1. 2.5.1. 暗号について
      2. 2.5.2. 鍵空間Kのサイズについて
    6. 2.6. 現代暗号
      1. 2.6.1. ブロック暗号
      2. 2.6.2. DES暗号(Data Encryption Standard)
        1. 2.6.2.1. f関数
        2. 2.6.2.2. DES暗号の限界
      3. 2.6.3. AES暗号(Advanced Encryption Standard)
        1. 2.6.3.1. AES暗号の撹拌部
    7. 2.7. 課題2.1
  3. 3. 共通鍵暗号方式
    1. 3.1. 利用モード
    2. 3.2. ECBモード(Electroric CodeBook)
    3. 3.3. CBCモード(Cipher-Block Chaining)
      1. 3.3.1. 排他的論理和
    4. 3.4. CFBモード(Cipher FeedBack)
    5. 3.5. OFBモード(Output FeedBack)
    6. 3.6. 利用モード(シフト暗号)
    7. 3.7. メッセージ認証
    8. 3.8. まとめ
    9. 3.9. 課題3.1
  4. 4. 公開鍵暗号方式
    1. 4.1. 一方向性関数
    2. 4.2. 公開鍵暗号の利点
    3. 4.3. 公開鍵暗号の安全性
      1. 4.3.1. 安全性の目標・定義
      2. 4.3.2. 攻撃者のタイプ
      3. 4.3.3. 各種暗号の安全性
    4. 4.4. 初等整数論
      1. 4.4.1. 有限体(素体Fp\mathbb{F}_pFp​)
      2. 4.4.2. 既約剰余類
      3. 4.4.3. オイラー関数
      4. 4.4.4. オイラーの定理
        1. 4.4.4.1. オイラーの定理の利用
      5. 4.4.5. 中国人剰余定理
    5. 4.5. 課題4.1
  5. 5. RSA暗号
    1. 5.1. 秘密鍵の計算
      1. 5.1.1. 拡張ユークリッド法
    2. 5.2. べき乗剰余計算
    3. 5.3. RSA暗号の誤用
    4. 5.4. 素数の選択
    5. 5.5. RSAの安全性
    6. 5.6. RSA-OAEP(Optimal Asymmetric Encryption Padding)
    7. 5.7. 課題5.1
  6. 6. ElGamal暗号
    1. 6.1. 原始元
    2. 6.2. ElGamal暗号の誤用
    3. 6.3. 素数の選択
      1. 6.3.1. Pohlig-Hellman algorithm
      2. 6.3.2. Baby-step Giant-step algorithm
    4. 6.4. ElGamal暗号の安全性
    5. 6.5. Cramer-Shoup暗号
      1. 6.5.1. ハッシュ関数
    6. 6.6. 課題6.1
  7. 7. McEliece暗号
  8. 8. Rabin暗号
    1. 8.1. 平方剰余
      1. 8.1.1. ルジャンドル記号とヤコビ記号
    2. 8.2. 素数判定アルゴリズム (Rabin法)
      1. 8.2.1. アルゴリズムの原理
    3. 8.3. 課題8.1
  9. 9. 鍵配送・鍵共有
    1. 9.1. Diffie-Hellmanの公開鍵配送方式
    2. 9.2. DH鍵配送方式の安全性
      1. 9.2.1. 中間攻撃
    3. 9.3. 公開鍵暗号方式を利用する方式
    4. 9.4. IDに基づく方式
    5. 9.5. 共通鍵暗号方式を用いる方式
    6. 9.6. 課題9.1
  10. 10. ディジタル署名
    1. 10.1. RSA暗号によるディジタル署名方式
      1. 10.1.1. RSA署名方式の問題
      2. 10.1.2. RSA-PSS署名方式
    2. 10.2. 公開鍵暗号方式の問題点(なりすまし)
    3. 10.3. 公開鍵認証基盤(PKI: Public Key Infrastrucure)
    4. 10.4. 公開鍵暗号を用いた署名付き鍵配送方式
    5. 10.5. ElGamal暗号を利用した署名方式
      1. 10.5.1. ElGamal署名方式の安全性
    6. 10.6. DSA署名(Digital Signature Algorithm)
    7. 10.7. ブラインド署名(RSAタイプ)
  11. 11. ブラインド署名
    1. 11.1. 零知識対話証明(ZKIP: Zero Knowledge Interactive Proof)
      1. 11.1.1. 洞窟の問題(零知識対話証明)
      2. 11.1.2. 洞窟の問題の解決案
    2. 11.2. Fiat-Shamir認証方式
    3. 11.3. 高次Fiat-Shamir認証方式
    4. 11.4. Schnorrの認証方式
    5. 11.5. 課題11.1
  12. 12. 電子マネー・電子投票
    1. 12.1. 暗号技術の応用
    2. 12.2. 電子現金の条件
    3. 12.3. 電子財布型電子現金
    4. 12.4. オンライン検証型電子現金:ブラインド署名を利用した電子現金
    5. 12.5. お釣り
    6. 12.6. 金額の構造
    7. 12.7. 小銭瓶方式(おつりを1つにまとめる方式)
    8. 12.8. 電子投票の条件
    9. 12.9. 電子投票の方式
      1. 12.9.1. 高次剰余暗号を利用する方式
      2. 12.9.2. ミックスネットを利用する方式
        1. 12.9.2.1. ElGamalシャッフル
        2. 12.9.2.2. 他のシャッフル
      3. 12.9.3. ブラインド署名を利用する方式
  13. 13. 秘密分散法
    1. 13.1. 分散環境
    2. 13.2. 秘密分散法
      1. 13.2.1. Shamirの(k, n)しきい値法
    3. 13.3. 視覚復号型秘密分散方式
    4. 13.4. 秘密分散法による暗号の多重化
    5. 13.5. 検証可能秘密分散方式
      1. 13.5.1. Feldmanの検証可能秘密分散方式
    6. 13.6. 課題13.1
  14. 14. 秘匿計算
    1. 14.1. 秘密計算・秘匿検索
    2. 14.2. 秘密計算の実現法
      1. 14.2.1. 回路計算
      2. 14.2.2. 準同形暗号を用いた秘密計算
      3. 14.2.3. 秘密分散法を用いた秘密計算
  15. 15. 参考文献

CS专业课学习笔记

情報セキュリティ

情報セキュリティの目的

情報セキュリティ(information security)とは、様々なセキュリティ上の危険や脅威から情報資産を保護し、機密性(Confidentiality)、完全性(Integrity)、可用性(Availability)の3つの観点で正常な機能・状態を保持することにより、情報ステムや情報の信頼性を高め、情報システムの利用者が安心して情報システムを利用できるようにすることである

情報セキュリティ(CIA) 定義
機密性 その情報にアクセスを許可されたものだけがアクセスできるようにすること
完全性 情報およびその処理方法が正確であり完全であるようにすること
可用性 正当な利用者が必要な時に情報および関連する資産に確実にアクセスできる状態を保つこと
本人認証 情報の作成者や送信者が本物であることを保証すること
責任・監査 システムが、いつ、誰に利用されたかを追跡できること
プライバシ 情報やサービスの利用が他人に観察されないようにすること

情報セキュリティのマネージメント

セキュリティポリシー

組織が情報資産を活用するにあたり、情報セキュリティ上保護すべき対象範囲と、 それらの対策や管理運用方針などを文書化したもの

情報セキュリティ基本方針

組織のセキュリティ方針の根幹をなすもの

組織のトップ(上層部・経営層)によって承認され、情報資産にかかわるすべての人員に周知徹底(ISMS(Infromation Security Management System)認証基準)

  • 目的
  • 用語の定義
  • 適用範囲
  • 基本原則及び方針
  • 組織体制及び責任と権限
  • 諸規定との関連
  • 教育・訓練
  • 監査
  • 評価と見直し
  • セキュリティ事故への対応
  • 例外処理
  • 罰則規定

情報セキュリティ管理策の分類

  • セキュリティ基本方針
  • 情報セキュリティのための組織
  • 資産分類
  • 人的資源のセキュリティ
  • 物理的および環境的セキュリティ
  • 通信および運用管理
  • アクセス制御
  • 情報システムの取得、開発およびメンテナンス
  • 情報セキュリティインシデント
  • 事業継続管理
  • 適合性

情報セキュリティの運用

情報資産

  • 物理的資産
    • コンピュータ・ハードウェア、通信機器、施設・設備
  • 情報・データ
    • 文書、データベース等
  • ソフトウェア
    • アプリケーションソフトウェア、OS、開発ツール等
  • 製品やサービス
  • 企業イメージ
    • 企業の評判、信頼度等
  • 人員
    • 社員、利用者、運営管理者、顧客等

セキュリティに関わる脅威

セキュリティリスクの評価式:リスク = 資産価値 × 脅威 × 脆弱性

リスク分析の手法

  • ベースラインアプローチ:
    • 定性分析手法で、組織全体を俯瞰し、既存の標準や規定を基に一定のセキュリティレベルに準拠しているかを調査する手法
  • 非形式アプローチ:
    • 今までの経験に基づいた定性的なリスク分析手法コンサルタントのレベルにより分析結果が左右される
  • 詳細アプローチ:
    • 定量的分析手法で、組織全体のすべての情報資産を洗い出し、各脅威の発生確率と脆弱性の重要度に関する評価を行い、それを基にリスクの大きさを評価する手法
  • 組み合わせアプローチ:
    • システムの構成や業務に応じて、ベースラインアプローチと詳細アプローチを使い分ける

脅威の種類

  1. 不正攻撃(ポートスキャン、Dos(Denial of Sevices) DDos
  2. 侵入 (トロイの木馬、バッファーオーバーフロー、バックドア)
  3. マルウェア(ウイルス、ワーム、スパイウェア、ランサムウェア)
  4. 盗聴
  5. 改ざん
  6. なりすまし
  7. 持ち出し
  8. ソーシャルエンジニアリング
  9. 事故・災害
  10. 紛失
  11. 不作為の作為

(1)~(3):ソフトウェアを含めてコンピューターに関わるもの
(4)~(6):ネットワーク上で通信や記録に関わるもの
(7)~(11):人が関わるもの

不正攻撃
  • ポートスキャン(Port scanner): 攻撃の糸口を発見するための手段
  • Dos(Denial of Sevrices):大量のデータを送りつけることで負荷をかけシステムをダウンさせる
  • DDoS(Distributed Denail of Services):複数個所に分散したDoS攻撃(1か所からアクセスが集中するDoS攻撃は検知がしやすいため、複数個所から攻撃することで、検出されにくくしている)
侵入
  • トロイの木馬(Trojan Horse):不正ファイルを実行させることで、 悪意のある機能を実行させる
  • バッファーオーバーフロー(Buffer overflow):セキュリティホールの1つバッファに想定以上の長さのデータが入力されてしまうバグ((スタック) あふれた値で関数の戻り先アドレスを上書きすることにより、制御を奪うことができる)
  • バックドア(Backdoor):不正者が使用権を確認するコンピュータの機能を無許可で利用するために、コンピュータ内に設けられた通信接続の機能侵入後仕掛けることで、次回以降の侵入をより容易にする
マルウェア(malware)

malware = 「malicious」+「software」
不正かつ有害に動作させる意図で作成された悪意のあるソフトウェアや悪質なコードの総称

  • ウイルス: 他のプログラムやファイルの一部を書き換え、自己複製する機能をもつマルウェア
  • ワーム(worm): 自身を複製して他のシステムに拡散する(Code Red, Nimda, Sobig, Mydoom, Conficker)
  • スパイウェア(spyware): コンピュータの内部情報を外部に送信(情報収集)(キーロガー、アドウェア、ダウンローダ)
  • ランサムウェア(ransomware): コンピュータをロックしたり、重要なファイルを暗号化して読めなくし、身代金(ransom)を要求する(AIDS Trojan, PC Cyborg, Reveton, CryptoLocker)

マルウェアの感染経路:

  • Web閲覧:メールに添付されたURLに誘導
  • Web誘導:偽セキュリティソフト配布サイト誘導感染
  • ネットワーク:セキュリティホール(無線パスワード未使用等)
  • メール添付:添付ファイル内(偽装)
  • 外部記憶媒体:USBメモリ、ディジタルカメラ
  • ファイル共有ソフト
  • マクロプログラム:Office(VBA)

不正攻撃・マルウェア対策:

  • ファイアーウォール: パケットフィルタリング
  • アクセスログ: 定期的な監視
  • 不要なポートを無効にする
  • バージョン管理、セキュリティパッチ
  • アンチウイルスソフトウェアの導入
Webアプリケーションの脅威
  • SQLインジェクション(SQL injection):Webアプリケーションの入力データとしてSQL文を入力し、想定外のSQL文を意図的に実行させることでデータベースを攻撃する手法
  • クロスサイトスクリプティング(Cross-site scripting,简称XSS):Webページを動的に生成するアプリケーションのセキュリティ上の不備を意図的に利用し、サイト間を横断して悪意のあるスクリプトを混入させることでユーザのCookie(ユーザ情報、セッション情報)を盗むなどの攻撃手法
  • クロスサイトリクエストフォージェリ(Cross-site request forgery,通常缩写为CSRF或XSRF):悪意のあるスクリプトが埋め込まれたWebページを訪問者に閲覧させて、別のWebサイトでその訪問者が意図しない操作を行わせる攻撃手法
  • セッションハイジャック(Session hijacking):認証が完了してセッションを開始しているブラウザとWebサーバの間の通信において、CookieやセッションIDなどのセッション情報を盗むことで、対象セッションを通信当事者以外が乗っ取る攻撃手法

跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任

盗聴・改ざん・なりすまし
  • なりすまし(masquerading):攻撃者は通信をしている人のふりをして通信を行う(認証(IDの正当性)の侵害)
  • 中間者攻撃(man-in-the-middle attack):セッションの乗っ取りが先に行われ、アクティブな通信セッションが盗聴
  • 盗聴:ネットワーク等を流れる情報をアクセス権のない第三者が盗み見ること
    • 受動的に行われる(ログが残らない)
    • ネットワーク上のどこで行われるかわからない

盗聴の主な手段:

  • コンピュータに直接仕掛ける
  • ネットワーク上のデータを読み取る
  • 空気中のデータを読み取る(電磁界の変化を読み取る):EMC等
人を対象にした攻撃
  • 持ち出し:USBメモリなどの記録媒体に機密情報を保存し持ち出す
  • ソーシャルエンジニアリング(Social engineering):人間の心理的な隙や、行動のミスにつけ込んで個人が持つ秘密情報を入手する方法
    • 重役や上司、重要顧客、システム管理者などと身分を詐称して電話をかけ、パスワードや重要情報を聞き出す
    • IDやパスワードが書かれた紙(付箋紙など)を瞬間的に見て暗記してメモする
    • 学校の同級生の親族や警察・公安委員会・裁判所を名乗り、住所や電話番号などの個人情報を聞き出す
  • フィッシング(Phishing):インターネット上のユーザから経済的価値がある情報(ユーザ名、パスワード、クレジットカード情報)を奪う詐欺行為信頼されている主体になりすましたEメールによって偽のWebサーバに誘導することによって行われることが多い

情報セキュリティの脆弱性

攻撃者によってセキュリティ上の脅威の原因となる管理や設備の問題、システム上の誤りや設計の問題、またシステムの各種設定の問題など

脆弱性を最小化するには:

  • 組織に関わる対策:セキュリティポリシ、情報セキュリティの運営組織
  • ソフトウェアおよびハードウェアについての対策:ファイアウォール、侵入検知システム(IDS)、アンチウイルスソフト、セキュリティパッチ、パスワード
  • 物理的対策:IDカード、施錠、バックアップ
  • 人的対策:責任範囲の明確化、パスワード管理、教育

セキュリティ技術的対策6階層

情報セキュリティ強化に必要な要素

  1. 技術:暗号技術をはじめ、バイオ情報による個人識別技術、電子透かし等による著作権保護、ウイルス対策、ファイアウォール、不正 侵入検知システム
  2. 管理・運営:ISO/IEC 15408,ISO/IEC17799
  3. 法制度:不正アクセス行為の禁止などに関する法律、知的財産権、個人情報保護法等
  4. 倫理

情報セキュリティ技術と法制度

情報技術などの新しい技術の出現により、従来の法制度を適用できない事例 \Rightarrow 法制度の整備が必要

  • 不正アクセス行為の禁止などに関する法律
  • 電気通信事業法
  • 知的財産権
  • 著作権法
  • 個人情報保護法
  • IT基本法

ディジタルフォレンジックス(Digital forensics):不正アクセスや情報漏えいなどのセキュリティインシデントの発生時に、原因究明や法的証拠を保全するために対象となる電子的記録を収集・解析すること

暗号システムの基礎

  • 古典暗号
    • 換字式暗号
    • 転置式暗号
    • シーザー暗号
    • スキュタレー暗号
  • 現代暗号
    • 共通鍵暗号:ブロック暗号,ストリーム暗号,DES,AES,バーナム暗号
    • 公開鍵暗号:RSA暗号,楕円曲線暗号,エルガマル暗号
  • 量子暗号

暗号(Cryptography)

盗聴の恐れのある通信路を通して安全に通信を行うために情報記号列を変換(暗号化)する技術

安全な記号列から元の情報記号列へ戻す(復号)にはが必要

  • 鍵による分類
    • 共通鍵暗号(秘密鍵暗号、対称暗号):暗号化する鍵と復号する鍵が同一
    • 公開鍵暗号(非対称暗号):暗号化する鍵と復号する鍵が異なる
  • 処理単位による分類
    • ブロック暗号:一定の長さの単位で処理
    • ストリーム暗号:1bitごと処理

暗号系(Crypto System)

暗号系C: (P, C, K, E, D) 5つの集合により定義

  • P: 発生しうる平文(plain text)の有限集合
  • C: 発生しうる暗号文(cipher etxt)の有限集合
  • K: 可能性のある(key)の有限集合
  • E, D: 以下の性質を満たす関数の有限集合
    • ekEE,dkDD,kEK,kDK,xP,cCe_{k_E} \in E, d_{k_D} \in D, k_E \in K, k_D \in K, x \in P, c \in C
    • ekE:PC,dkD:CPe_{k_E}:P \rightarrow C, \quad d_{k_D}:C \rightarrow P
    • ekE(x)=c,dkD(c)=x,s.t.dkD(ekE(x))=xe_{k_E}(x) = c, \quad d_{k_D}(c) = x, \quad s.t. \quad d_{k_D}(e_{k_E}(x)) = x

実用的な暗号系

  • 安全性
    • 暗号文c=ekD(x)C,xP,kDKc = e_{k_D}(x) \in C, x \in P, k_D \in Kから、鍵kKk \in Kや平文xPx \in Pの情報が手に入らない
    • 鍵空間KKの大きさK|K|が大きい(全数探索が不可能)
  • 効率性
    • 暗号化・復号の関数ekE()E,dkD()D,kE,kDKe_{k_E}() \in E, d_{k_D}() \in D, k_E, k_D \in Kが高速に計算可能

古典暗号

現代暗号(共通鍵暗号)の基礎となる暗号方式、それぞれ単体では実用的ではない

  • 換字暗号(Substitution Cipher):平文の文字を別の文字で置き換える
    • eg. 古代ローマ、シーザー暗号
  • 転置暗号(Permutation Cipher):平文の文字列を並び替える
    • eg. 古代ギリシャ、スキュタレー暗号

換字暗号(Substitution Cipher)

平文・暗号文

P=C=Zn={0,1,,n1}P = C = Z_n = \lbrace 0, 1, \cdots, n-1 \rbrace

K={π=01n2n1π(0)π(1)π(n2)π(n1):置換}\begin{aligned} K = \begin{Bmatrix} \pi = \begin{matrix} 0 & 1 & \cdots & n-2 & n-1 \\ \pi(0) & \pi(1) & \cdots & \pi(n-2) & \pi(n-1) \end{matrix} : \text{置換} \end{Bmatrix} \end{aligned}

  • π(0),,π(n1)\pi(0), \cdots, \pi(n-1)ZnZ_nから1つずつ重複なく選ぶ
  • 鍵空間の大きさ:K=n!=12(n1)n|K| = n! = 1 \cdot 2 \cdot \cdots \cdot (n-1) \cdot n
暗号化・復号関数
  • πK\pi \in K
  • eπ(x):=π(x)e_{\pi}(x) := \pi(x)
  • dπ(y):=π1(y),π1d_{\pi}(y) := \pi^{-1}(y), \quad \pi^{-1}π\piの逆置換
換字暗号の例
  • シフト暗号(シーザー暗号)
  • アフィン暗号

51mod26=5x(mod26)1x=215^{-1} \bmod 26 = 5 \cdot x \pmod {26} \equiv 1 \Rightarrow x = 21

転置暗号(Permutation Cipher)

平文・暗号文

P=C=(Zn)mP = C = (Z_n)^m

  • 長さmmの文字列(文字はZnZ_nの要素に対応)

K={π=12m1mπ(1)π(2)π(m1)π(m):置換}\begin{aligned} K = \begin{Bmatrix} \pi = \begin{matrix} 1 & 2 & \cdots & m-1 & m \\ \pi(1) & \pi(2) & \cdots & \pi(m-1) & \pi(m) \end{matrix} : \text{置換} \end{Bmatrix} \end{aligned}

  • π(1),,π(m)\pi(1), \cdots, \pi(m)ZmZ_mから1つずつ重複なく選ぶ
  • 鍵空間の大きさ:K=m!=12m|K| = m! = 1 \cdot 2 \cdot \cdots \cdot m
暗号化・復号関数
  • πK\pi \in K
  • eπ(x1,,xm):=xπ(1),,xπ(m)e_{\pi}(x_1, \cdots, x_m) := x_{\pi(1)}, \cdots, x_{\pi(m)}
  • dπ(y1,,ym):=yπ1(1),,yπ1(m)d_{\pi}(y_1, \cdots, y_m) := y_{\pi^{-1}(1)}, \cdots, y_{\pi^{-1}(m)}
転置暗号の例

安全性

  • 換字暗号では、文字の統計的性質(出現頻度)を利用することで解読される可能性
    • p(e)=0.127,p(t)=0.91,p(a)=0.82,,p(z)=0.063p(e) = 0.127, p(t) = 0.91, p(a) = 0.82, \cdots, p(z) = 0.063
  • 転置暗号では、文字の連続する文字の出現頻度(bigram, trigram)を利用することで解読される可能性
    • 頻出する文字の並び: bigram: th, he, in, er, an, re, ed \quad trigram: the, ing, and, her, ere, ent

安全性の考え方

計算量的安全性

  • 暗号系を破るための既存の最も高速な方法をもってしても途方もなく莫大な計算時間を必要となるとき安全と考える
  • 計算機の能力や攻撃法の発展で破られる可能性
  • 現代暗号の安全性の基本となっている

情報理論的安全性

  • 無限の計算資源を用いても破ることができないとき安全と考える

情報理論的安全性

C. Shannon, “Communication Theory of SecrecySystems”, 1949

定義:すべてのxP,yCx \in P, y \in Cに対して, P(x  y)=P(x)\color{red}{P(x \ |\ y) = P(x)}であるとき, つまり, 暗号文yyが与えられたときに平文がxxである条件付き確率が平文xxを選ぶ確率が同じであるとき,この暗号系は情報理論的安全性, あるいは, 完全守秘性(perfect secrecy)をもつという

  • 暗号文yCy \in Cを入手したあとの平文xPx \in Pの確率分布P(x  y)\color{red}{P(x \ |\ y)}が、入手前P(x)\color{red}{P(x)}と変わらないことを意味(平文に関して暗号文から何も情報が得られていない)

暗号について

情報理論的安全性をもつ暗号について

定理: K=P=C|K| = |P| = |C|を満たす暗号系を考える。すべての鍵が等確率1K\frac{1}{|K|}で使われ, かつ,すべてのxP,yCx \in P, y \in Cに対して, ek(x)=y\color{red}{e_k(x) = y}となるような唯一の鍵kK\color{red}{k \in K}存在するならば, その時に限り,この暗号系は完全秘匿性をもつ

鍵空間Kのサイズについて

定理: 情報理論的に安全な暗号系においてはKP\color{red}{|K| \geq |P|}でなければならない。(鍵空間の大きさは平文空間より大きくなければならない)

現代暗号

1970年代以降, ネットワーク技術が発展し, 不特定多数の人がネットワークにアクセスできるようになり, ネットワーク上での情報通信の安全性(秘匿性)を考慮する必要

暗号化・復号の処理を容易に実現するために,誰でも利用できる標準の暗号が必要

標準暗号の設計思想

  • 暗号アルゴリズムは公開
  • 暗号の安全性は鍵によって確保(鍵が分からなければ、復号できない)

ブロック暗号

平文をデータ撹拌(かくはん)部において多段階に渡って部分鍵に基づいた撹拌を行うことで疑似ランダム性をもつ暗号文を生成する(撹拌部では、換字置換を組み合わせる)

DES暗号(Data Encryption Standard)

1976年にアメリカ連邦政府の標準暗号として採用された共通鍵暗号(データ:64ビット, 鍵:56ビット)

f関数

S-Boxを利用

DES暗号の限界

コンピュータの性能向上により解読される可能性

  • TDES(Triple DES):3鍵DES
    • 異なる3つの鍵(k1,k2,k3k_1, k_2, k_3)を使いDESにより3重に暗号化する方式(当面は安全)

DESの解読: 1998年 Deep Crack(DES解読コンピュータ)により22時間で解読

AES暗号(Advanced Encryption Standard)

標準暗号であるDESの後継としてアメリカ政府が公募2001年にDaemen, Rijmen(ベルギー)が開発したRijndael(ラインドール)が採用される(選考に2年間余り)

  • データ長:128ビット
  • 鍵長:128, 192, 256ビット
  • 構造:SPN構造(Substitution-Permutation Network)置換(Substitution)と転置(permutation)の組み合わせ(ネットワーク)により構成される
AES暗号の撹拌部

課題2.1

平文集合と鍵集合をP=K={0,1,2,3,4}P = K = \lbrace 0, 1, 2, 3, 4 \rbraceとする. なお, 平文xPx \in Pの確立分布は, Pr(x=0)=13,Pr(x=1)=Pr(x=2)=Pr(x=3)=Pr(x=4)=16Pr(x = 0) = \frac{1}{3}, Pr(x = 1) = Pr(x = 2) = Pr(x = 3) = Pr(x = 4) = \frac{1}{6} であるとする. この時, 以下の二つの暗号方式について, 暗号文の確率分布Pr(c)Pr(c)及び条件付き確率Pr(x  c)Pr(x \ |\ c)を計算しなさい. なお, 鍵は等確率で選択されるとする. すなわち, Pr(k)=15,kKPr(k) = \frac{1}{5}, k \in Kである.

(1) ek(x)=x+kmod5e_k(x) = x + k \bmod 5

CC x=0x = 0 x=1x = 1 x=2x = 2 x=3x = 3 x=4x = 4
k=0k = 0 0 1 2 3 4
k=1k = 1 1 2 3 4 5
k=2k = 2 2 3 4 5 6
k=3k = 3 3 4 5 6 7
k=4k = 4 4 5 6 7 8

暗号文の確率分布Pr(c)Pr(c)は以下である

Pr(c=0)=13×15=115Pr(c=1)=13×15+16×15=110Pr(c=2)=215Pr(c=3)=16Pr(c=4)=15Pr(c=5)=215Pr(c=6)=110Pr(c=7)=115Pr(c=8)=130\begin{aligned} &Pr(c = 0) = \frac{1}{3} \times \frac{1}{5} = \frac{1}{15} \\ &Pr(c = 1) = \frac{1}{3} \times \frac{1}{5} + \frac{1}{6} \times \frac{1}{5} = \frac{1}{10} \\ &Pr(c = 2) = \frac{2}{15} \\ &Pr(c = 3) = \frac{1}{6} \\ &Pr(c = 4) = \frac{1}{5} \\ &Pr(c = 5) = \frac{2}{15} \\ &Pr(c = 6) = \frac{1}{10} \\ &Pr(c = 7) = \frac{1}{15} \\ &Pr(c = 8) = \frac{1}{30} \end{aligned}

Bayesの定理により

Pr(P=x  C=c)=Pr(P=x)Pr(C=c  Pr(P=x)Pr(C=c)=Pr(P=x)k,x=dk(c)Pr(K=k)k,cc(k)Pr(K=k)Pr(x=dk(c))\begin{aligned} Pr(P = x \ |\ C = c) &= \frac{Pr(P = x) \cdot Pr(C = c \ |\ Pr(P = x)}{Pr(C = c)} \\ &= \frac{Pr(P = x) \cdot \sum_{k,x = d_k(c)} Pr(K = k)}{\sum_{k,c \in c(k)} Pr(K = k) \cdot Pr(x = d_k(c))} \end{aligned}

条件付き確率Pr(x  c)Pr(x \ |\ c)は以下である

Pr(00)=1,Pr(10)=0,Pr(20)=0,Pr(30)=0,Pr(40)=0Pr(01)=23,Pr(11)=13,Pr(21)=0,Pr(31)=0,Pr(41)=0Pr(02)=12,Pr(12)=14,Pr(22)=14,Pr(32)=0,Pr(42)=0Pr(03)=25,Pr(13)=15,Pr(23)=15,Pr(33)=15,Pr(43)=0Pr(04)=13,Pr(14)=16,Pr(24)=16,Pr(34)=16,Pr(44)=16Pr(05)=0,Pr(15)=14,Pr(25)=14,Pr(35)=14,Pr(45)=14Pr(06)=0,Pr(16)=0,Pr(26)=13,Pr(36)=13,Pr(46)=13Pr(07)=0,Pr(17)=0,Pr(27)=0,Pr(37)=12,Pr(47)=12Pr(08)=0,Pr(18)=0,Pr(28)=0,Pr(38)=0,Pr(48)=1\begin{aligned} &Pr(0 | 0) = 1, \quad Pr(1 | 0) = 0, \quad Pr(2 | 0) = 0,\quad Pr(3 | 0) = 0, \quad Pr(4 | 0) = 0 \\ \\ &Pr(0 | 1) = \frac{2}{3}, \quad Pr(1 | 1) = \frac{1}{3}, \quad Pr(2 | 1) = 0,\quad Pr(3 | 1) = 0, \quad Pr(4 | 1) = 0 \\ \\ &Pr(0 | 2) = \frac{1}{2}, \quad Pr(1 | 2) = \frac{1}{4}, \quad Pr(2 | 2) = \frac{1}{4},\quad Pr(3 | 2) = 0, \quad Pr(4 | 2) = 0 \\ \\ &Pr(0 | 3) = \frac{2}{5}, \quad Pr(1 | 3) = \frac{1}{5}, \quad Pr(2 | 3) = \frac{1}{5},\quad Pr(3 | 3) = \frac{1}{5}, \quad Pr(4 | 3) = 0 \\ \\ &Pr(0 | 4) = \frac{1}{3}, \quad Pr(1 | 4) = \frac{1}{6}, \quad Pr(2 | 4) = \frac{1}{6}, \quad Pr(3 | 4) = \frac{1}{6}, \quad Pr(4 | 4) = \frac{1}{6} \\ \\ &Pr(0 | 5) = 0, \quad Pr(1 | 5) = \frac{1}{4}, \quad Pr(2 | 5) = \frac{1}{4}, \quad Pr(3 | 5) = \frac{1}{4}, \quad Pr(4 | 5) = \frac{1}{4} \\ \\ &Pr(0 | 6) = 0, \quad Pr(1 | 6) = 0, \quad Pr(2 | 6) = \frac{1}{3}, \quad Pr(3 | 6) = \frac{1}{3}, \quad Pr(4 | 6) = \frac{1}{3} \\ \\ &Pr(0 | 7) = 0, \quad Pr(1 | 7) = 0, \quad Pr(2 | 7) = 0, \quad Pr(3 | 7) = \frac{1}{2}, \quad Pr(4 | 7) = \frac{1}{2} \\ \\ &Pr(0 | 8) = 0, \quad Pr(1 | 8) = 0, \quad Pr(2 | 8) = 0, \quad Pr(3 | 8) = 0, \quad Pr(4 | 8) = 1 \end{aligned}

(2) ek(x)=x+ke_k(x) = x + k

CC x=0x = 0 x=1x = 1 x=2x = 2 x=3x = 3 x=4x = 4
k=0k = 0 0 1 2 3 4
k=1k = 1 1 2 3 4 5
k=2k = 2 2 3 4 5 6
k=3k = 3 3 4 5 6 7
k=4k = 4 4 5 6 7 8

暗号文の確率分布Pr(c)Pr(c)は以下である

Pr(c=0)=115Pr(c=1)=110Pr(c=2)=215Pr(c=3)=16Pr(c=4)=15Pr(c=5)=215Pr(c=6)=110Pr(c=7)=115Pr(c=8)=130\begin{aligned} &Pr(c = 0) = \frac{1}{15} \\ &Pr(c = 1) = \frac{1}{10} \\ &Pr(c = 2) = \frac{2}{15} \\ &Pr(c = 3) = \frac{1}{6} \\ &Pr(c = 4) = \frac{1}{5} \\ &Pr(c = 5) = \frac{2}{15} \\ &Pr(c = 6) = \frac{1}{10} \\ &Pr(c = 7) = \frac{1}{15} \\ &Pr(c = 8) = \frac{1}{30} \end{aligned}

Bayesの定理により条件付き確率Pr(x  c)Pr(x \ |\ c)は以下である

Pr(00)=1,Pr(10)=0,Pr(20)=0,Pr(30)=0,Pr(40)=0Pr(01)=23,Pr(11)=13,Pr(21)=0,Pr(31)=0,Pr(41)=0Pr(02)=12,Pr(12)=14,Pr(22)=14,Pr(32)=0,Pr(42)=0Pr(03)=25,Pr(13)=15,Pr(23)=15,Pr(33)=15,Pr(43)=0Pr(04)=13,Pr(14)=16,Pr(24)=16,Pr(34)=16,Pr(44)=16Pr(05)=0,Pr(15)=14,Pr(25)=14,Pr(35)=14,Pr(45)=14Pr(06)=0,Pr(16)=0,Pr(26)=13,Pr(36)=13,Pr(46)=13Pr(07)=0,Pr(17)=0,Pr(27)=0,Pr(37)=12,Pr(47)=12Pr(08)=0,Pr(18)=0,Pr(28)=0,Pr(38)=0,Pr(48)=1\begin{aligned} &Pr(0 | 0) = 1, \quad Pr(1 | 0) = 0, \quad Pr(2 | 0) = 0,\quad Pr(3 | 0) = 0, \quad Pr(4 | 0) = 0 \\ \\ &Pr(0 | 1) = \frac{2}{3}, \quad Pr(1 | 1) = \frac{1}{3}, \quad Pr(2 | 1) = 0,\quad Pr(3 | 1) = 0, \quad Pr(4 | 1) = 0 \\ \\ &Pr(0 | 2) = \frac{1}{2}, \quad Pr(1 | 2) = \frac{1}{4}, \quad Pr(2 | 2) = \frac{1}{4},\quad Pr(3 | 2) = 0, \quad Pr(4 | 2) = 0 \\ \\ &Pr(0 | 3) = \frac{2}{5}, \quad Pr(1 | 3) = \frac{1}{5}, \quad Pr(2 | 3) = \frac{1}{5},\quad Pr(3 | 3) = \frac{1}{5}, \quad Pr(4 | 3) = 0 \\ \\ &Pr(0 | 4) = \frac{1}{3}, \quad Pr(1 | 4) = \frac{1}{6}, \quad Pr(2 | 4) = \frac{1}{6}, \quad Pr(3 | 4) = \frac{1}{6}, \quad Pr(4 | 4) = \frac{1}{6} \\ \\ &Pr(0 | 5) = 0, \quad Pr(1 | 5) = \frac{1}{4}, \quad Pr(2 | 5) = \frac{1}{4}, \quad Pr(3 | 5) = \frac{1}{4}, \quad Pr(4 | 5) = \frac{1}{4} \\ \\ &Pr(0 | 6) = 0, \quad Pr(1 | 6) = 0, \quad Pr(2 | 6) = \frac{1}{3}, \quad Pr(3 | 6) = \frac{1}{3}, \quad Pr(4 | 6) = \frac{1}{3} \\ \\ &Pr(0 | 7) = 0, \quad Pr(1 | 7) = 0, \quad Pr(2 | 7) = 0, \quad Pr(3 | 7) = \frac{1}{2}, \quad Pr(4 | 7) = \frac{1}{2} \\ \\ &Pr(0 | 8) = 0, \quad Pr(1 | 8) = 0, \quad Pr(2 | 8) = 0, \quad Pr(3 | 8) = 0, \quad Pr(4 | 8) = 1 \end{aligned}

共通鍵暗号方式

利用モード

一般に取り扱われるデータ(平文)の長さはブロック暗号のデータ長を超えるため、利用するブロック暗号のデータ長ごとにデータ(平文)を分割して暗号化する必要がある

ECBモード(Electroric CodeBook)

ECBモードは同一鍵を用いて、各ブロックを暗号化し、復号の際も同じ鍵を用いて、各ブロックを復号する

  • 同一の平文が入力されたとき、暗号文も同一となるそのため、統計的な解析等で推測がしやすくなる(画像のようなデータの場合、同じ値が続くことがある)
  • 1ビット誤りの伝搬: 1ブロック
  • 並列計算: 実行可能

CBCモード(Cipher-Block Chaining)

暗号化では、乱数を用いて初期値rrを準備する。初期値rrはそのまま送信し、その後、暗号化した暗号ブロックを送信する。暗号化は平文ブロックxix_iとひとつ前の暗号文ブロックci1c_{i-1}排他的論理和を取り、その値を暗号化鍵kkで暗号化し、暗号文ブロックcic_iを生成する。なお、最初の平文ブロックx1x_1暗号化については、ひとつ前の暗号文ブロックc0c_0が存在しないため、その値を初期値rrとする

復号では、暗号文ブロックcic_iを復号し、その値とひとつ前の暗号文ブロックci1c_{i-1}との排他的論理和を取り、元の平文ブロックxix_iが計算できる

  • 最も良く使用されているモードであり、標準実装されている場合が多い
  • 初期値は定数を用いると安全でなくなる
  • 1ビット誤りの伝搬: 1ブロック+次のブロックの1ビット
  • 並列計算: 暗号化は実行不可、復号は実行可能

排他的論理和

排他的論理和xyx \oplus yの計算:

  1. x,yx,yの数値をそれぞれをビット列(2進数)に変換
  2. 各ビットごとに下記の表にある計算を実行
  3. 計算結果を元の数値に変換
\oplus 0 1
0 0 1
1 1 0

CFBモード(Cipher FeedBack)

暗号化、復号共CBCモードと同様に初期値rrを準備して最初に初期値rrを送信する。暗号化はひとつ前の暗号文ブロックci1c_{i-1}を暗号化鍵kkで暗号化した値と平文ブロックxix_iとの排他的論理和を取り、暗号文ブロックcic_iを生成する。なお、最初の平文ブロックx1x_1暗号化については、ひとつ前の暗号文ブロックc0c_0が存在しないため、その値を初期値rrとする

復号では、ひとつ前の暗号文ブロックci1c_{i-1}を暗号化鍵kkで暗号化し、その値と暗号文ブロックcic_iとの排他的論理和を取り、元の平文ブロックxix_iが計算できる

  • 暗号化処理のみで実現可能
  • 1ビット誤りの伝搬: 1ブロック+次のブロックに影響
  • 並列計算: 暗号化は実行不可、復号は実行可能

OFBモード(Output FeedBack)

OFBモード暗号化はCFBモードと似た形になっているが、次のブロック送るのは排他的論理和を取る前の暗号化した値のみになる。r0r_0は初期値rrとして、rir_iri1r_{i-1}暗号化した値になり、rir_irrが与えられば、次々と暗号化することによって計算できる。rir_iと平文ブロックxix_i排他的論理和を取り、暗号化できる。

これらの計算は復号も同様になる。すなわち、OFBモードの暗号化、復号の処理は入力が異なるだけで、全く同じものになる。

  • 暗号化処理のみで実現可能
  • 暗号化と復号が同じ処理
  • ビット誤りによる影響が最小限であるので、無線通信のようなエラーレートが高い通信路にも適する
  • 1ビット誤りの伝搬: 1ビットのみ
  • 並列計算: 暗号化・復号初期値が既知であれば事前計算可能

利用モード(シフト暗号)

シフト暗号: ek(x)=x+kmodn,n=32e_k(x) = x + k \bmod n, \quad n = 32
鍵: k=7k = 7
平文: king (x1,x2,x3,x4)=(10,8,13,6)\Rightarrow (x_1, x_2, x_3, x_4) = (10, 8, 13, 6)
初期値: 13(CBC, CFB, OFBモード)

  • ECBモード

c1=ek(x1)=10+7mod32=17c2=ek(x2)=8+7mod32=15c3=ek(x3)=13+7mod32=20c4=ek(x4)=6+7mod32=13\begin{aligned} &c_1 = e_k(x_1) = 10 + 7 \bmod 32 = 17 \\ &c_2 = e_k(x_2) = 8 + 7 \bmod 32 = 15 \\ &c_3 = e_k(x_3) = 13 + 7 \bmod 32 = 20 \\ &c_4 = e_k(x_4) = 6 + 7 \bmod 32 = 13 \end{aligned}

暗号文: rpun

  • CBCモード

c1=ek(x1c0)=(1013)+7mod32=14c2=ek(x2c1)=(814)+7mod32=13c3=ek(x3c2)=(1313)+7mod32=7c4=ek(x4c3)=(67)+7mod32=8\begin{aligned} &c_1 = e_k(x_1 \oplus c_0) = (10 \oplus 13) + 7 \bmod 32 = 14 \\ &c_2 = e_k(x_2 \oplus c_1) = (8 \oplus 14) + 7 \bmod 32 = 13 \\ &c_3 = e_k(x_3 \oplus c_2) = (13 \oplus 13) + 7 \bmod 32 = 7 \\ &c_4 = e_k(x_4 \oplus c_3) = (6 \oplus 7) + 7 \bmod 32 = 8 \end{aligned}

暗号文: onhi

x1=dk(c1)c0=(147mod32)13=10x2=dk(c2)c1=(137mod32)14=8x3=dk(c3)c2=(77mod32)13=13x4=dk(c4)c3=(87mod32)7=6\begin{aligned} &x_1 = d_k(c_1) \oplus c_0 = (14 - 7 \bmod 32) \oplus 13 = 10 \\ &x_2 = d_k(c_2) \oplus c_1 = (13 - 7 \bmod 32) \oplus 14 = 8 \\ &x_3 = d_k(c_3) \oplus c_2 = (7 - 7 \bmod 32) \oplus 13 = 13 \\ &x_4 = d_k(c_4) \oplus c_3 = (8 - 7 \bmod 32) \oplus 7 = 6 \end{aligned}

平文: king

  • CFBモード

c1=x1ek(c0)=10(13+7mod32)=30c2=x2ek(c1)=8(30+7mod32)=13c3=x3ek(c2)=13(13+7mod32)=25c4=x4ek(c3)=6(25+7mod32)=6\begin{aligned} &c_1 = x_1 \oplus e_k(c_0) = 10 \oplus (13 + 7 \bmod 32) = 30 \\ &c_2 = x_2 \oplus e_k(c_1) = 8 \oplus (30 + 7 \bmod 32) = 13 \\ &c_3 = x_3 \oplus e_k(c_2) = 13 \oplus (13 + 7 \bmod 32) = 25 \\ &c_4 = x_4 \oplus e_k(c_3) = 6 \oplus (25 + 7 \bmod 32) = 6 \end{aligned}

暗号文: =nzg

x1=c1ek(c0)=30(13+7mod32)=10x2=c2ek(c1)=13(30+7mod32)=8x3=c3ek(c2)=25(13+7mod32)=13x4=c4ek(c3)=6(25+7mod32)=6\begin{aligned} &x_1 = c_1 \oplus e_k(c_0) = 30 \oplus (13 + 7 \bmod 32) = 10 \\ &x_2 = c_2 \oplus e_k(c_1) = 13 \oplus (30 + 7 \bmod 32) = 8 \\ &x_3 = c_3 \oplus e_k(c_2) = 25 \oplus (13 + 7 \bmod 32) = 13 \\ &x_4 = c_4 \oplus e_k(c_3) = 6 \oplus (25 + 7 \bmod 32) = 6 \end{aligned}

平文: king

  • OFBモード

c1=x1ek(r0)=10(13+7mod32)=30c2=x2ek(r1)=8(20+7mod32)=19c3=x3ek(r2)=13(27+7mod32)=15c4=x4ek(r3)=6(2+7mod32)=15\begin{aligned} &c_1 = x_1 \oplus e_k(r_0) = 10 \oplus (13 + 7 \bmod 32) = 30 \\ &c_2 = x_2 \oplus e_k(r_1) = 8 \oplus (\color{blue}{20} + 7 \bmod 32) = 19 \\ &c_3 = x_3 \oplus e_k(r_2) = 13 \oplus (\color{blue}{27} + 7 \bmod 32) = 15 \\ &c_4 = x_4 \oplus e_k(r_3) = 6 \oplus (\color{blue}{2} + 7 \bmod 32) = 15 \end{aligned}

暗号文: =tpp

x1=c1ek(r0)=30(13+7mod32)=10x2=c2ek(r1)=19(20+7mod32)=8x3=c3ek(r2)=15(27+7mod32)=13x4=c4ek(r3)=15(2+7mod32)=6\begin{aligned} &x_1 = c_1 \oplus e_k(r_0) = 30 \oplus (13 + 7 \bmod 32) = 10 \\ &x_2 = c_2 \oplus e_k(r_1) = 19 \oplus (\color{blue}{20} + 7 \bmod 32) = 8 \\ &x_3 = c_3 \oplus e_k(r_2) = 15 \oplus (\color{blue}{27} + 7 \bmod 32) = 13 \\ &x_4 = c_4 \oplus e_k(r_3) = 15 \oplus (\color{blue}{2} + 7 \bmod 32) = 6 \end{aligned}

平文: king

メッセージ認証

CMAC(Cipher based Message Authentication Code)

メッセージの完全性を保証するために利用

まとめ

モード 並列化 1ビット誤りの伝搬 特徴
ECB 可能 1ブロック 同一平文が同一暗号文に
CBC 暗号化:不可 \quad 復号: 可能 1ブロック + 次ブロック1ビット 最も使用
CFB 暗号化:不可 \quad 復号: 可能 1ビット + 次のブロック 暗号器のみ
OFB 事前計算可能(初期値既知) 1ビット 暗号器のみ \quad 暗号化・復号同一

課題3.1

平文集合と暗号文集合P=C=Z32P = C = Z_{32}とし、アフィン暗号ek1,k2(x)=k1x+k2mod32e_{k_1,k_2}(x) = k_1x + k_2 \bmod 32を考える。この時、ECBモード、CBCモード、CFBモード、OFBモードの各利用モードで暗号化せよ。また、復号も行い、元の平文に戻ることを確認せよ

なお、アフィン暗号の復号はdk1,k2(y)=k11(yk2)mod32d_{k_1, k_2}(y) = k_1^{-1} (y - k_2) \bmod 32であり、5113mod32(5×131mod32)5^{-1} \equiv 13 \bmod 32(5 \times 13 \equiv 1 \bmod 32)である。

暗号化鍵は(k1,k2)=(5,17)(k_1, k_2) = (5, 17)とし、平文はqueenとする。また、CBCモード、CFBモード、OFBモードの初期値は11とする。

  • ECBモード
    • 暗号:ci=ek(xi)c_i = e_k(x_i)
    • 復号:xi=dk(ci)x_i = d_k(c_i)

c1=ek1,k2(x1)=5×16+17mod32=1c2=ek1,k2(x2)=5×20+17mod32=21c3=ek1,k2(x3)=5×4+17mod32=5c4=ek1,k2(x4)=5×4+17mod32=5c5=ek1,k2(x5)=5×13+17mod32=18\begin{aligned} &c_1 = e_{k_1, k_2}(x_1) = 5 \times 16 + 17 \bmod 32 = 1 \\ &c_2 = e_{k_1, k_2}(x_2) = 5 \times 20 + 17 \bmod 32 = 21 \\ &c_3 = e_{k_1, k_2}(x_3) = 5 \times 4 + 17 \bmod 32 = 5 \\ &c_4 = e_{k_1, k_2}(x_4) = 5 \times 4 + 17 \bmod 32 = 5 \\ &c_5 = e_{k_1, k_2}(x_5) = 5 \times 13 + 17 \bmod 32 = 18 \end{aligned}

暗号文: bvffs

x1=dk1,k2(c1)=51(117)mod32=13×16mod32=16x2=dk1,k2(c2)=51(2117)mod32=13×4mod32=20x3=dk1,k2(c3)=51(517)mod32=13×20mod32=4x4=dk1,k2(c4)=51(517)mod32=13×20mod32=4x5=dk1,k2(c5)=51(1817)mod32=13×1mod32=13\begin{aligned} &x_1 = d_{k_1, k_2}(c_1) = 5^{-1}(1 - 17) \bmod 32 = 13 \times 16 \bmod 32 = 16 \\ &x_2 = d_{k_1, k_2}(c_2) = 5^{-1}(21 - 17) \bmod 32 = 13 \times 4 \bmod 32 = 20 \\ &x_3 = d_{k_1, k_2}(c_3) = 5^{-1}(5 - 17) \bmod 32 = 13 \times 20 \bmod 32 = 4 \\ &x_4 = d_{k_1, k_2}(c_4) = 5^{-1}(5 - 17) \bmod 32 = 13 \times 20 \bmod 32 = 4 \\ &x_5 = d_{k_1, k_2}(c_5) = 5^{-1}(18 - 17) \bmod 32 = 13 \times 1 \bmod 32 = 13 \end{aligned}

復号の結果: queen

  • CBCモード
    • 暗号: ci=ek(xici1),c0=rc_i = e_k(x_i \oplus c_{i-1}), \quad c_0 = r
    • 復号: xi=dk(ci)ci1,c0=rx_i = d_k(c_i) \oplus c_{i-1}, \quad c_0 = r

c1=ek1,k2(x1c0)=k1(1611)+k2mod32=5×27+17mod32=24c2=ek1,k2(x2c1)=k1(2024)+k2mod32=5×12+17mod32=13c3=ek1,k2(x3c2)=k1(413)+k2mod32=5×9+17mod32=30c4=ek1,k2(x4c3)=k1(430)+k2mod32=5×26+17mod32=19c5=ek1,k2(x5c4)=k1(1319)+k2mod32=5×30+17mod32=7\begin{aligned} &c_1 = e_{k_1, k_2}(x_1 \oplus c_0) = k_1(16 \oplus 11) + k_2 \bmod 32 = 5 \times 27 + 17 \bmod 32 = 24 \\ &c_2 = e_{k_1, k_2}(x_2 \oplus c_1) = k_1(20 \oplus 24) + k_2 \bmod 32 = 5 \times 12 + 17 \bmod 32 = 13 \\ &c_3 = e_{k_1, k_2}(x_3 \oplus c_2) = k_1(4 \oplus 13) + k_2 \bmod 32 = 5 \times 9 + 17 \bmod 32 = 30 \\ &c_4 = e_{k_1, k_2}(x_4 \oplus c_3) = k_1(4 \oplus 30) + k_2 \bmod 32 = 5 \times 26 + 17 \bmod 32 = 19 \\ &c_5 = e_{k_1, k_2}(x_5 \oplus c_4) = k_1(13 \oplus 19) + k_2 \bmod 32 = 5 \times 30 + 17 \bmod 32 = 7 \end{aligned}

暗号文: yn=th

x1=dk1,k2(c1)c0=k11(c1k2)mod32c0=13×7mod3211=16x2=dk1,k2(c2)c1=k11(c1k2)mod32c1=13×28mod3224=20x3=dk1,k2(c3)c2=k11(c1k2)mod32c2=13×13mod3213=4x4=dk1,k2(c4)c3=k11(c1k2)mod32c3=13×2mod3230=4x5=dk1,k2(c5)c4=k11(c1k2)mod32c4=13×22mod3219=13\begin{aligned} &x_1 = d_{k_1, k_2}(c_1) \oplus c_0 = k_1^{-1}(c_1 - k_2) \bmod 32 \oplus c_0 = 13 \times 7 \bmod 32 \oplus 11 = 16 \\ &x_2 = d_{k_1, k_2}(c_2) \oplus c_1 = k_1^{-1}(c_1 - k_2) \bmod 32 \oplus c_1 = 13 \times 28 \bmod 32 \oplus 24 = 20 \\ &x_3 = d_{k_1, k_2}(c_3) \oplus c_2 = k_1^{-1}(c_1 - k_2) \bmod 32 \oplus c_2 = 13 \times 13 \bmod 32 \oplus 13 = 4 \\ &x_4 = d_{k_1, k_2}(c_4) \oplus c_3 = k_1^{-1}(c_1 - k_2) \bmod 32 \oplus c_3 = 13 \times 2 \bmod 32 \oplus 30 = 4 \\ &x_5 = d_{k_1, k_2}(c_5) \oplus c_4 = k_1^{-1}(c_1 - k_2) \bmod 32 \oplus c_4 = 13 \times 22 \bmod 32 \oplus 19 = 13 \end{aligned}

復号の結果: queen

  • CFBモード
    • 暗号: ci=xiek(ci1),c0=rc_i = x_i \oplus e_k(c_{i-1}), \quad c_0 = r
    • 復号: xi=ciek(ci1),c0=rx_i = c_i \oplus e_k(c_{i-1}), \quad c_0 = r

c1=x1ek1,k2(c0)=16(55+17mod32)=24c2=x2ek1,k2(c1)=20(120+17mod32)=29c3=x3ek1,k2(c2)=4(145+17mod32)=6c4=x4ek1,k2(c3)=4(30+17mod32)=11c5=x5ek1,k2(c4)=13(55+17mod32)=5\begin{aligned} &c_1 = x_1 \oplus e_{k_1, k_2}(c_0) = 16 \oplus (55 + 17 \bmod 32) = 24 \\ &c_2 = x_2 \oplus e_{k_1, k_2}(c_1) = 20 \oplus (120 + 17 \bmod 32) = 29 \\ &c_3 = x_3 \oplus e_{k_1, k_2}(c_2) = 4 \oplus (145 + 17 \bmod 32) = 6 \\ &c_4 = x_4 \oplus e_{k_1, k_2}(c_3) = 4 \oplus (30 + 17 \bmod 32) = 11 \\ &c_5 = x_5 \oplus e_{k_1, k_2}(c_4) = 13 \oplus (55 + 17 \bmod 32) = 5 \end{aligned}

暗号文: y/glf

x1=c1ek1,k2(c0)=24(55+17mod32)=16x2=c2ek1,k2(c1)=29(120+17mod32)=20x3=c3ek1,k2(c2)=6(145+17mod32)=4x4=c4ek1,k2(c3)=11(30+17mod32)=4x5=c5ek1,k2(c4)=5(55+17mod32)=13\begin{aligned} &x_1 = c_1 \oplus e_{k_1, k_2}(c_0) = 24 \oplus (55 + 17 \bmod 32) = 16 \\ &x_2 = c_2 \oplus e_{k_1, k_2}(c_1) = 29 \oplus (120 + 17 \bmod 32) = 20 \\ &x_3 = c_3 \oplus e_{k_1, k_2}(c_2) = 6 \oplus (145 + 17 \bmod 32) = 4 \\ &x_4 = c_4 \oplus e_{k_1, k_2}(c_3) = 11 \oplus (30 + 17 \bmod 32) = 4 \\ &x_5 = c_5 \oplus e_{k_1, k_2}(c_4) = 5 \oplus (55 + 17 \bmod 32) = 13 \end{aligned}

復号の結果: queen

  • OFBモード
    • 暗号: ci=xiri,ri=ek(ri1),r0=rc_i = x_i \oplus r_i, \quad r_i = e_k(r_{i-1}), \quad r_0 = r
    • 復号: xi=ciri,ri=ek(ri1),r0=rx_i = c_i \oplus r_i, \quad r_i = e_k(r_{i-1}), \quad r_0 = r

c1=x1ek1,k2(r0)=16(5×11+17mod32)=168=24c2=x2ek1,k2(r1)=20(5×8+17mod32)=2025=13c3=x3ek1,k2(r2)=4(5×25+17mod32)=414=10c4=x4ek1,k2(r3)=4(5×14+17mod32)=423=19c5=x5ek1,k2(r4)=13(5×23+17mod32)=134=9\begin{aligned} &c_1 = x_1 \oplus e_{k_1, k_2}(r_0) = 16 \oplus (5 \times 11 + 17 \bmod 32) = 16 \oplus 8 = 24 \\ &c_2 = x_2 \oplus e_{k_1, k_2}(r_1) = 20 \oplus (5 \times 8 + 17 \bmod 32) = 20 \oplus 25 = 13 \\ &c_3 = x_3 \oplus e_{k_1, k_2}(r_2) = 4 \oplus (5 \times 25 + 17 \bmod 32) = 4 \oplus 14 = 10 \\ &c_4 = x_4 \oplus e_{k_1, k_2}(r_3) = 4 \oplus (5 \times 14 + 17 \bmod 32) = 4 \oplus 23 = 19 \\ &c_5 = x_5 \oplus e_{k_1, k_2}(r_4) = 13 \oplus (5 \times 23 + 17 \bmod 32) = 13 \oplus 4 = 9 \end{aligned}

暗号文: ynktj

x1=c1ek1,k2(r0)=24(5×11+17mod32)=248=16x2=c2ek1,k2(r1)=13(5×8+17mod32)=1325=20x3=c3ek1,k2(r2)=10(5×25+17mod32)=1014=4x4=c4ek1,k2(r3)=19(5×14+17mod32)=1923=4x5=c5ek1,k2(r4)=9(5×23+17mod32)=94=13\begin{aligned} &x_1 = c_1 \oplus e_{k_1, k_2}(r_0) = 24 \oplus (5 \times 11 + 17 \bmod 32) = 24 \oplus 8 = 16 \\ &x_2 = c_2 \oplus e_{k_1, k_2}(r_1) = 13 \oplus (5 \times 8 + 17 \bmod 32) = 13 \oplus 25 = 20 \\ &x_3 = c_3 \oplus e_{k_1, k_2}(r_2) = 10 \oplus (5 \times 25 + 17 \bmod 32) = 10 \oplus 14 = 4 \\ &x_4 = c_4 \oplus e_{k_1, k_2}(r_3) = 19 \oplus (5 \times 14 + 17 \bmod 32) = 19 \oplus 23 = 4 \\ &x_5 = c_5 \oplus e_{k_1, k_2}(r_4) = 9 \oplus (5 \times 23 + 17 \bmod 32) = 9 \oplus 4 = 13 \end{aligned}

復号の結果: queen

公開鍵暗号方式

秘密である復号鍵kDk_Dから生成した暗号化鍵kEk_Eを公開する暗号方式暗号化鍵kEk_Eの生成には一方向性関数(One-Way Function)を利用共通鍵暗号のように秘密の鍵をお互いに交換する必要がなく、公開されている暗号化鍵を使って暗号化が可能

一方向性関数

入力x1,x2,,xnx_1, x_2, \cdots, x_nに対し, 出力F(x1,,xn)F(x_1, \cdots, x_n)を計算するのは容易であるが, 出力F(x1,,xn)F(x_1, \cdots, x_n)から入力x1,,xnx_1, \cdots, x_nを求めることが計算量的に困難である関数

代表的な一方向性関数:

  • 素因数分解: 大きな素数p,qn=p×qp, q \rightleftarrows n = p \times q
  • 離散対数問題:xx, (公開:g,ng, n) y=gxmodn\rightleftarrows y = g^x \bmod n

一方向性関数と公開鍵暗号方式

  • 素因数分解
    • RSA暗号(1977)
    • RSA-OAEP暗号
    • Rabin暗号(1979)
  • 離散対数問題
    • ElGamal暗号(1982)
    • Cramer-Shoup暗号
    • 楕円暗号(1985)
  • ナップザック問題
    • Merkle-Hellman暗号
  • 線形符号の復号問題
    • McEliece 暗号

公開鍵暗号の利点

  • 鍵の管理が簡単

共通鍵暗号では, nn人がお互いに暗号化しようとすると全体で(n2)\binom{n}{2}の鍵が必要。それに対し公開鍵暗号では, その人が秘密の復号鍵を用意すれば良いため全体でnn個となる(暗号化鍵は電話帳のようなもので公開するので、管理の負担が減少する)

  • ディジタル署名に応用

公開鍵暗号方式の鍵の非対称性を利用して, 署名方式が構築できる

公開鍵暗号の安全性

安全性の目標・定義

  • 一方向性(OW: One-Wayness)
    • 暗号文c=f(x)c = f(x)から平文x=f1(c)x = f^{-1}(c)を推定するのが困難
  • 強秘匿性(SS: Semantically Secure)
    • 平文xxに関する何らかの情報(平文のある1bit)を推定するのが困難
  • 識別不可能性(IND:INDistingishability)
    • 2つの平文x1,x2x_1, x_2のどちらかに対する暗号文をccとし,その対応を知らされていない攻撃者にとって暗号文ccがどちらの平文x1,x2x_1, x_2に対応するかを推定するのが困難
  • 頑健性(NM:Non-Malleability)
    • 平文に対する暗号文をc=f(x)c = f(x)とする. ccのみを知っている攻撃者が平文xxに関連する平文xx^{'}に対応する暗号文cc^{'}を作り出すことが困難

攻撃者のタイプ

  • 暗号文単独攻撃(CTA: CipherText only Attack)
    • 攻撃者には暗号文のみが入手可能
  • 既知平文攻撃(KPA: Known Plaintext Attack)
    • 暗号文に対応する平文も攻撃者に渡る
  • 選択平文攻撃(CPA:Chosen Plaintext Attack)
    • 攻撃者が自由に選んだ平文とそれに対応する暗号文の両方を入手可能
  • 選択暗号文攻撃(CCA:Chosen Ciphertext Attack)
    • 攻撃者が自由に選んだ暗号文とそれに対応する平文の両方を入手可能
  • 適応的選択暗号文攻撃(CCA2)
    • CCAで暗号文を選ぶときに以前の復号の結果を利用することが可能

各種暗号の安全性

  • 古典暗号
    • OW-CTA
    • 暗号化の方式は秘密
  • 現代暗号までの暗号
    • OW-KPA
    • 暗号化の方式は秘密
    • 諜報活動等で平文が既知の場合もある
  • 現代暗号
    • IND-CCA2
    • 暗号化の方式は公開
    • 公開鍵暗号は暗号化鍵が公開
    • 攻撃者の強さは少なくともCPA

初等整数論

  • 合同式 (congruence)

2つの整数 a,bZa, b \in \mathbb{Z} に対して, aba - b が自然数nNn \in \mathbb{N}で割り切れるとき,「nnを法として合同」という.

abmodnabnZ:={n×i  iZ}a \equiv b \bmod n \Leftrightarrow a - b \in n\mathbb{Z} := \lbrace n \times i \ |\ i \in \mathbb{Z} \rbrace

  • 剰余類 (residue class, coset)

nnを法として合同なものを集めた集合(aaを代表元という)

[a]:=a+nZ={a+x  xnZ}[a] := a + n\mathbb{Z} = \lbrace a + x \ |\ x \in n\mathbb{Z} \rbrace

  • 剰余類環 (quotient ring)

剰余類の集合

Zn:=ZnZ={[0],[1],,[n1]}={0,1,,n1}\mathbb{Z}_n := \frac{\mathbb{Z}}{n\mathbb{Z}} = \lbrace [0], [1], \cdots, [n-1] \rbrace = \lbrace 0, 1, \cdots, n-1 \rbrace

例:剰余環n=5n = 5

Z5={[0],[1],[2],[3],[4]}={0,1,2,3,4}\mathbb{Z}_5 = \lbrace [0], [1], [2], [3], [4] \rbrace = \lbrace 0, 1, 2, 3, 4 \rbrace

[0]=0+5Z={,10,5,0,5,10,,}[1]=1+5Z={,9,4,1,6,11,,}[2]=2+5Z={,8,3,2,7,12,,}[3]=3+5Z={,7,2,3,8,13,,}[4]=4+5Z={,6,1,4,9,14,,}\begin{aligned} &[0] = 0 + 5\mathbb{Z} = \lbrace \cdots, -10, -5, 0, 5, 10, \cdots, \rbrace \\ &[1] = 1 + 5\mathbb{Z} = \lbrace \cdots, -9, -4, 1, 6, 11, \cdots, \rbrace \\ &[2] = 2 + 5\mathbb{Z} = \lbrace \cdots, -8, -3, 2, 7, 12, \cdots, \rbrace \\ &[3] = 3 + 5\mathbb{Z} = \lbrace \cdots, -7, -2, 3, 8, 13, \cdots, \rbrace \\ &[4] = 4 + 5\mathbb{Z} = \lbrace \cdots, -6, -1, 4, 9, 14, \cdots, \rbrace \end{aligned}

有限体(素体Fp\mathbb{F}_p)

NNが素数PPである剰余環Zp\mathbb{Z}_p体(Field)Fp\mathbb{F}_pとなる. 0を除いたすべての要素xFp/{0}x \in \mathbb{F}_p / \lbrace 0 \rbraceは乗法に関する逆元x1x^{-1}を持ち, 除算が定義できる.

nnが合成数の場合にはZn\mathbb{Z}_nであり, 除算が定義できない(乗法に関する逆元がない要素が存在)

例: Z6\mathbb{Z}_6の乗算表(𝑛=6𝑛 = 6のとき)

2, 3, 4は掛けて1となる要素が存在しないため、逆元は存在しない

×\times 1 2 3 4 5
1 1 2 3 4 5
2 2 4 0 2 4
3 3 0 3 0 3
4 4 2 0 4 2
5 5 4 3 2 1

既約剰余類

nnと互いに素な整数aaで代表される剰余類を法nnに関する既約剰余類という.

Zn:={aZ  gcd(a,n)=1}\mathbb{Z}_n^* := \lbrace a \in \mathbb{Z} \ |\ \gcd(a, n) = 1 \rbrace

  • gcd: 最大公約数

例:

Z6={0,1,2,3,4,5}Z6={1,5}Z12={0,1,2,3,4,5,6,7,8,9,10,11}Z12={1,5,7,11}\begin{aligned} &\mathbb{Z}_6 = \lbrace 0, 1, 2, 3, 4, 5 \rbrace \\ &\mathbb{Z}_6^* = \lbrace 1, 5 \rbrace \\ \\ &\mathbb{Z}_{12} = \lbrace 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 \rbrace \\ &\mathbb{Z}_{12}^* = \lbrace 1, 5, 7, 11 \rbrace \end{aligned}

  • それぞれの逆元は自分自身になる
  • eg.5×51=151=55 \times 5^{-1} = 1 \rightarrow 5^{-1} = 5 (gcd(12,5)=1\gcd(12, 5) = 1)
    • 5×5=25mod12=15 \times 5 = 25 \bmod 12 = 1
    • 7×7=49mod12=17 \times 7 = 49 \bmod 12 = 1
    • 11×11=121mod12=111 \times 11 = 121 \bmod 12 = 1

オイラー関数

整数nnに対し, gcd(a,n)=1\gcd(a, n) = 1を満たすaaの総数(Zn\mathbb{Z}_n^*の要素数)

整数m=p1e1p2e2pmemm = p_1^{e_1} \cdot p_2^{e_2} \cdots p_m^{e_m}に対して, オイラー数ϕ(n)\phi(n)は以下で計算できる

ϕ(n)=n(11p1)(11pm)\phi(n) = n \cdot (1 - \frac{1}{p_1}) \cdots (1 - \frac{1}{p_m})

例: n=12=2231n = 12 = 2^2 \cdot 3^1

ϕ(12)=12(112)(113)=4\phi(12) = 12 \cdot (1 - \frac{1}{2}) \cdot (1 - \frac{1}{3}) = 4

オイラーの定理

nnと互いに素な(gcd(a,n)=1)a(\gcd(a, n) = 1) aに対し

aϕ(n)1modna^{\phi(n)} \equiv 1 \bmod n

オイラーの定理の利用

1351413^{5^{14}}を19で割った余りを求める(10進数で68億桁)

ϕ(19)=18\phi(19) = 18より, 13181mod1913^{18} \equiv 1 \bmod 19

指数部分が18の倍数であれば19を法として1と合同であるので, 指数部分が18の倍数のときは無視できる

ϕ(18)=6\phi(18) = 6より,

561mod185^6 \equiv 1 \bmod 18

したがって,

51456252527mod185^{14} \equiv 5^{6 \cdot 2} \cdot 5^2 \equiv 5^2 \equiv 7 \bmod 18

1322mod1913^2 \equiv -2 \bmod 19より,

13514137132+2+2+1132132132131(2)(2)(2)1310410mod1913^{5^{14}} \equiv 13^7 \equiv 13^{2+2+2+1} \equiv 13^2 \cdot 13^2 \cdot 13^2 \cdot 13^1 \equiv (-2)(-2)(-2)\cdot 13 \equiv -104 \equiv 10 \bmod 19

中国人剰余定理

複数の素数p1,p2,,prp_1, p_2, \cdots, p_rに対して, aiZpia_i \in \mathbb{Z}_{p_i}を与えると,各i=1,,ri = 1, \cdots, rについて, xaimodpix \equiv a_i \bmod p_iを満たす整数x,0xM=p1p2prx, 0 \leq x \leq M = p_1p_2 \cdots p_rが一意に定まる

例:中国人剰余定理

連立合同式

{x2mod3x3mod5x2mod7\begin{aligned} \begin{cases} x \equiv 2 \bmod 3 \\ x \equiv 3 \bmod 5 \\ x \equiv 2 \bmod 7 \end{cases} \end{aligned}

  • M=3×5×7=105M = 3 \times 5 \times 7 = 105
  • M1=5×7=35,M2=3×7=21,M3=3×5=15M_1 = 5 \times 7 = 35, M_2 = 3 \times 7 = 21, M_3 = 3 \times 5 = 15

y1=351mod3=2(35×x1mod3)y2=211mod5=1(21×x1mod5)y3=151mod7=1(15×x1mod7)\begin{aligned} y_1 = 35^{-1} \bmod 3 = 2 \quad (35 \times x \equiv 1 \bmod 3) \\ y_2 = 21^{-1} \bmod 5 = 1 \quad (21 \times x \equiv 1 \bmod 5) \\ y_3 = 15^{-1} \bmod 7 = 1 \quad (15 \times x \equiv 1 \bmod 7) \end{aligned}

x=2352+3211+2151=140+63+30=233mod105=23x = 2 \cdot 35 \cdot 2 + 3 \cdot 21 \cdot 1 + 2 \cdot 15 \cdot 1 = 140 + 63 + 30 = 233 \bmod 105 = 23

課題4.1

以下の連立合同式を満たす整数xxを求めよ

{x3mod11x1mod13x7mod17\begin{aligned} \begin{cases} x \equiv 3 \bmod 11 \\ x \equiv 1 \bmod 13 \\ x \equiv 7 \bmod 17 \end{cases} \end{aligned}

  • M=11×13×17=2431M = 11 \times 13 \times 17 = 2431
  • M1=13×17=221,M2=11×17=187,M3=11×13=143M_1 = 13 \times 17 = 221, M_2 = 11 \times 17 = 187, M_3 = 11 \times 13 = 143

y1=2211mod11=1(221×x1mod11)y2=1871mod13=8(187×x1mod13)y3=1431mod17=5(143×x1mod17)\begin{aligned} y_1 = 221^{-1} \bmod 11 = 1 \quad (221 \times x \equiv 1 \bmod 11) \\ y_2 = 187^{-1} \bmod 13 = 8 \quad (187 \times x \equiv 1 \bmod 13) \\ y_3 = 143^{-1} \bmod 17 = 5 \quad (143 \times x \equiv 1 \bmod 17) \end{aligned}

x=32211+11878+71435=7164mod2431=2302x = 3 \cdot 221 \cdot 1 + 1 \cdot 187 \cdot 8 + 7 \cdot 143 \cdot 5 = 7164 \bmod 2431 = 2302

RSA暗号

1977年にMITにいたRivest, Shamir, Adlemanによって開発された素因数分解の困難性を利用した公開鍵暗号方式

鍵生成

鍵生成

  • 利用者は2つの大きな素数 p,qp, q を生成(pq|p| \simeq |q|)
  • n=pq,ϕ(n)=(p1)(q1)n = pq, \phi(n) = (p - 1)(q - 1)
  • eZϕ(n)s.tgcd(ϕ(n),e)=1e \in \mathbb{Z}_{\phi(n)} \quad s.t \quad \gcd(\phi(n), e) = 1をランダムに選択
  • d=e1modϕ(n)d = e^{-1} \bmod \phi(n)を計算(ed1modϕ(n)ed \equiv 1 \bmod \phi(n))

秘密鍵: 復号鍵 d,(p,q)d, (p, q)
公開鍵: 暗号化鍵 e,ne, n

平文

平文

  • mZnm \in \mathbb{Z}_n
暗号化

暗号化

  • c=e(m):=memodnc = e(m) := m^e \bmod n
復号

復号

  • m=d(c):=cdmodnm = d(c) := c^{d} \bmod n

定理: 任意の平文mZnm \in \mathbb{Z}_nに対し, d(e(m))=medmodn=md(e(m)) = m^{ed} \bmod n = m

例題:

图中有错误, d=3491mod840=349,c=123349mod899=402d = 349^{-1} \bmod 840 = 349, c = 123^{349} \bmod 899 = 402

秘密鍵の計算

de1modϕ(n)d \equiv e^{-1} \bmod \phi(n)の計算(ed1modϕ(n)ed \equiv 1 \bmod \phi(n)を満たすeZϕ(n)e \in \mathbb{Z}_{\phi(n)}の計算)

拡張ユークリッド互除法

  • 入力: u,v(u>v)u, v (u > v)
  • 出力: gcd(u,v)\gcd(u, v), 係数(s,ts, t) s.tsu+tv=gcd(u,v)\quad s.t \quad su + tv = \gcd(u, v)

(u,v)=(ϕ(n),e)(u, v) = (\phi(n), e)として, 拡張ユークリッド法を適用

結果:

gcd(u,v)=gcd(ϕ(n),e)=1,sϕ(n)+te=1\gcd(u, v) = \gcd(\phi(n), e) = 1, \quad s\phi(n) + te = 1

ゆえに, te1modϕ(n)te \equiv 1 \bmod \phi(n)

従って, e1e^{-1} は係数 tt として求められる

拡張ユークリッド法

  • 入力: u,v(u>v)u, v (u > v)
  • 出力: gcd(u,v)\gcd(u, v), 係数(s,ts, t) s.tsu+tv=gcd(u,v)\quad s.t \quad su + tv = \gcd(u, v)

計算例:拡張ユークリッド法による秘密鍵の計算

べき乗剰余計算

例題:

RSA暗号の誤用

  1. 共通の法 nn を使用:
  • nn と鍵 e,de, d がの組を1つでも知ることができれば, nn の素因数分解が容易となる
  1. 同報通信, 同一平文:
  • 同一の平文を複数の送信元へ暗号化して送信, 同一の公開鍵 ee を用いて暗号化. このとき, 線形合同式を解くことにより,平文が求まる (中国人剰余定理)

{c1memodn1cLmemodnL\begin{aligned} \begin{cases} c_1 \equiv &m^e \bmod n_1 \\ &\vdots \\ c_L \equiv &m^e \bmod n_L \end{cases} \end{aligned}

  1. 小さな平文 mm を使用(高位ビットに1を挿入で回避)
  • mmnnee 乗根より小さければ, mod\bmod計算が関係ない

素数の選択

NN より小さい素数の数は, N/log2NN / \log_2 N 以上存在 p,qp, q の選択できる素数は数多く存在

  • p1,q+1p - 1, q + 1は大きな素因数 rr をもち, rr も大きな素因数をもつ
  • p,qp, qのビット数は512ビット以上(1024ビット)

RSAの安全性

  • 一方向性:満たす(と考えられている)
  • 強秘匿性:満たさない
    • ヤコビ記号が1か-1かを判定可能、平文に関する情報が漏れる可能性がある
  • 識別不可能性:満たさない
    • 平文 m1,m2m_1, m_2 が分かっていれば, m1emodn,m2emodnm_1^e \bmod n, m_2^e \bmod n を求めればどちらか判定可能 (e,ne, n は公開)
  • 頑健性:満たさない
    • 暗号文cA=mAemodnc_A = m_A^e \bmod nを送信したとする. 攻撃者は, 公開鍵 e,ne, n を用いて暗号化した. cE=mEemodnc_E = m_E^e \bmod ncAc_A に掛けると cAcE(mAmE)emodnc_Ac_E \equiv (m_Am_E)^e \bmod n となり, 別の平文 mAmEm_Am_E に書き換えられる

RSA-OAEP(Optimal Asymmetric Encryption Padding)

IND-CCA2を満たすようにRSA暗号を改良同一の平文に対して、同一の暗号文が出力されないように乱数を用いる

課題5.1

二つの素数 p=31,q=37p = 31, q = 37 により定まるRSA暗号を考える.

(1) 公開鍵 e=271e = 271 とする時, 秘密鍵ddを求めよ

  • n=pq=1147n = pq = 1147
  • ϕ(n)=(p1)(q1)=1080\phi(n) = (p - 1)(q - 1) = 1080
  • d=e1modϕ(n)=2711mod1080=271d = e^{-1} \bmod \phi(n) = 271^{-1} \bmod 1080 = 271

(2) 平文 m=333m = 333 を暗号化し, その結果を復号せよ

  • 暗号化: c=memodn=333271mod1147=333256×3338×3334×3332×333mod1147=333c = m^e \bmod n = 333^{271} \bmod 1147 = 333^{256} \times 333^8 \times 333^4 \times 333^2 \times 333 \bmod 1147 = 333
  • 復号: cdmodn=333271mod1147=333c^d \bmod n = 333^{271} \bmod 1147 = 333

ElGamal暗号

1982年にElGamalによって開発された離散対数問題の困難性を利用した公開鍵暗号方式

鍵生成

鍵生成

  • 利用者は大きな素数ppを生成
  • 乗法群Zp\mathbb{Z}^*_pの原始元α\alphaを求める
  • xZp1x \in \mathbb{Z}_{p-1}をランダムに選択
  • y=αxmodpy = \alpha^x \bmod pを計算

秘密鍵: 復号鍵 xx
公開鍵: 暗号化鍵 y,p,αy, p, \alpha

平文

平文

  • mZnm \in \mathbb{Z}_n
暗号化

暗号化

  • c=(c1,c2):=(αrmodp,myrmodp)c = (c_1, c_2) := (\alpha^r \bmod p, my^r \bmod p), rZp1:\quad \color{red}{r \in \mathbb{Z}_{p-1}}:乱数
復号

復号

  • m=c2/c1xmodpm = c_2 / c_1^x \bmod p

原始元

Fp=Zp=Z/(pZ)\mathbb{F}_p = \mathbb{Z}_p = \mathbb{Z} / (p\mathbb{Z})の乗法群Fp=Fp\mathbb{F}^*_p = \mathbb{F}_p \ {0}\lbrace 0 \rbraceにおいて

αi1,i=1,,p2,αp1=1\alpha^i \neq 1, i = 1, \cdots, p-2, \quad \alpha^{p-1} = 1

を満たすαFp\alpha \in \mathbb{F}^*_pを素体Fp\mathbb{F}_p原始元という.

このとき, 以下の巡回群のように表せる.

Fp={α0(=1),α1,,αp2}\mathbb{F}^*_p = \lbrace \alpha^0(=1), \alpha^1, \cdots, \alpha_{p-2} \rbrace

定理: 任意の平文mZpm \in \mathbb{Z}_pに対し, d(e(m))=md(e(m)) = m

例題:

ElGamal暗号の誤用

平文毎で共通の乱数rrを使用、もし, 同じrrを用いると

c1=(αr,m1yr),c2=(αr,m2yr)c_1 = (\alpha^r, m_1y^r), c_2 = (\alpha^r, m_2y^r)としたとき,

c2c1=m1yrm2yr=m1m2modp\frac{c_2}{c_1} = \frac{m_1y^r}{m_2y^r} = \frac{m_1}{m_2} \bmod p

となり, m1m_1が分かればm2m_2が分かることになる.

素数の選択

p1p - 1 が大きな素因数qqをもつ(qqは160ビット以上)

Pohlig-Hellmanのアルゴリズムに対する安全性を考慮

ppのビット数は

  • 512ビット以上(1980年代)
  • 1024ビット以上(1996年)
  • 20484ビット以上(現在以降)

が推奨されている

Pohlig-Hellman algorithm

Baby-step Giant-step algorithm

ElGamal暗号の安全性

  • 一方向性: 満たす
  • 強秘匿性: 満たす
  • 識別不可能性: 満たす
    • 確率暗号: 乱数 rr を利用して暗号化するため,同じ平文でも暗号文が異なる. 例. ElGamal暗号, RSA-OAEP暗号, Cramer-Shoup暗号, McEliece暗号
    • 確定暗号: 同じ平文を暗号化すると暗号文が同じになる暗号. 例. RSA暗号, Rabin暗号
  • 頑健性: 満たさない
    • 暗号文c=(c1,c2)=(αr,myr)c = (c_1, c_2) = (\alpha^r, my^r)に対して, m0<pm_0 < pを用いて, c=(c1,m0c2)c^{'} = (c_1, m_0c_2)とすると, c=(αr,m0myr)modpc^{'} = (\alpha^r, m_0my^r) \bmod pとなり, 別の平文m0mm_0mに書き換えられる

Cramer-Shoup暗号

ElGamal暗号の改良版

鍵生成

鍵生成

  • 利用者は大きな素数ppを生成
  • 位数ppの巡回群G\mathbb{G}の生成元(α,β)G2\alpha, \beta) \in \mathbb{G}^2 2をランダムに求める
  • (x00,x01,x10,x11,x20,x21)G6(x_{00}, x_{01}, x_{10}, x_{11}, x_{20}, x_{21}) \in \mathbb{G}^6をランダムに選択
  • yi=αxi0βxi1,i=0,1,2y_i = \alpha^{x_{i0}} \beta^{x_{i1}}, i = 0, 1, 2を計算
  • HH:ハッシュ関数

秘密鍵: 復号鍵 (x00,x01,x10,x11,x20,x21)(x_{00}, x_{01}, x_{10}, x_{11}, x_{20}, x_{21})
公開鍵: 暗号化鍵 y0,y1,y2,G,α,β,Hy_0, y_1, y_2, \mathbb{G}, \alpha, \beta, H

平文

平文

  • mZnm \in \mathbb{Z}_n
暗号化

暗号化

  • c=(c1,c2,c3,c4):=(αr,βr,my0r,(y1y2H(c1.c2,c3))r)modpc = (c_1, c_2, c_3, c_4) := (\alpha^r, \beta^r, my_0^r, (y_1y_2^{H(c_1. c_2, c_3)})^r) \bmod p, rZp:\quad \color{red}{r \in \mathbb{Z}_p}:乱数
復号

復号

  • c4=(c1x10,c2x10)(y1y2H(c1,c2,c3))modpc_4 = (c_1^{x_{10}}, c_2^{x_{10}})(y_1 y_2^{H(c_1, c^2, c^3)}) \bmod pを確認
  • m=c3c1x00c2x01m = c_3 \cdot c_1^{-x_{00}} c_2^{-x_{01}}

ハッシュ関数

関数h:{0,1}n{0,1}m(nm)h: \lbrace 0, 1 \rbrace^n \Rightarrow \lbrace 0, 1 \rbrace^m (n \geq m)

x{0,1}nx \in \lbrace 0, 1 \rbrace^nに対して, h(x)h(x)の計算は効率的に計算可能

x,y{0,1}ns.t.xyx, y \in \lbrace 0, 1 \rbrace^n \quad s.t. x \neq yに対して, h(x)=h(y)h(x) = h(y)となるような組(x,y)(x, y)を見るけることが困難である(衝突困難性)

  • eg. MD5, SHA, …

課題6.1

素数p=61p = 61により定まるElGamal暗号を考える. 秘密鍵x=33x = 33とする. 以下の問いに答えなさい. 途中の計算も記述すること.

(1) 原始元αZp\alpha \in \mathbb{Z}_pのひとつを求めよ.

1
2
3
4
5
6
7
8
9
10
p = 61
alpha = 2

def main():
for i in range(1, p):
primitive = alpha ** i % p
print("i = %d, primitive-element = %d" % (i, primitive))

if __name__ == "__main__":
main()

ソースコードを実行すると、素数p=61p = 61の時にα=2\alpha = 2は原始元であること明らかに。

(2) 公開鍵yyを求めよ. (1)で求めたα\alphaを利用せよ.

y=αxmodp233mod6153y = \alpha^x \bmod p \equiv 2^{33} \bmod 61 \equiv 53

(3) 平文m=41m = 41を暗号化し, その結果を復号せよ. ただし, 乱数はr=27r = 27とする.

暗号化:

  • y=αxmodp=53y = \alpha^x \bmod p = 53
  • c1=αrmodp=227mod61=38c_1 = \alpha^r \bmod p = 2^{27} \bmod 61 = 38
  • c2=myrmodp=415327mod61=50c_2 = m \cdot y^r \bmod p = 41 \cdot 53^{27} \bmod 61 = 50

復号:

  • m=c2/c1xmodp=50/3833mod61=41m = c_2 / c_1^x \bmod p = 50 / 38^{33} \bmod 61 = 41

McEliece暗号

1978年に提唱された公開鍵暗号方式であり、一般の線形符号の復号問題の困難性(NP完全)を利用する

鍵生成

鍵生成

  • C:FqC: \mathbb{F}_q上の(n,k)(n, k)線形符号(G:k×nG: k \times n 行列 rankG=krank G = k)
    • C:={c=xG  xFqk},d:=min{dH(c1,c2)  c1,c2C}C := \lbrace c = xG \ |\ x \in \mathbb{F}_q^k \rbrace, \quad d := \min \lbrace d_H(c_1, c_2) \ |\ c_1, c_2 \in C \rbrace
  • S:FqS: \mathbb{F}_q上のk×kk \times k正則行列
  • P:FqP: \mathbb{F}_q上のn×nn \times n置換行列

秘密鍵: S,G,PS, G, P
公開鍵: G:=SGPG^{'} := SGP

平文

平文

  • mFqkm \in \mathbb{F}_q^k
暗号化

暗号化

  • c:=mG+eFqnc := mG^{'} + e \in \mathbb{F}_q^n, 乱数eFqn(wt(e)t:=d12)e \in \mathbb{F}_q^n(wt(e) \leq t := \lfloor \frac{d-1}{2} \rfloor)
復号

復号

  • y:=cP1(=mSG+eP1)y := cP^{-1}(= mSG + eP^{-1})
  • yyを復号してc=mGCc^{'} = m^{'}G \in Cを計算(m=mSm^{'} = mS)
  • m=mS1m = m^{'}S^{-1}

Rabin暗号

1978年にRabinにより提案された公開鍵暗号方式

鍵生成

鍵生成

2つの素数p,q(pq,pq3mod4)p, q (|p| \simeq |q|, p \equiv q \equiv 3 \bmod 4)

  • Blum数n=pqn = pq
  • λ(n)=lcm(p1,q1)\lambda(n) = lcm(p - 1, q - 1), lcm:最小公倍数
  • λ(n)\lambda(n)と互いに素なeZλ(n)e \in \mathbb{Z}_{\lambda(n)}をランダムに選択
  • ed1modλ(n)ed \equiv 1 \bmod \lambda(n)を満たすddを計算

秘密鍵: d,p,qd, p, q
公開鍵: e,ne, n

平文

平文

  • mZn,0<m<n2,(mn)=1m \in \mathbb{Z}_n, 0 < m < \frac{n}{2}, (\frac{m}{n}) = 1
暗号化

暗号化

  • c:=m2modnc := m^2 \bmod n
復号

復号

  • mp=c(p+1)/4modp,mq=c(p+1)/4modqm_p = c^{(p + 1)/4} \bmod p, m_q = c^{(p + 1)/4} \bmod qを計算
  • (a,b){(mp,mq),(mp,mq),(mp,mq),(mpmq)}(a, b) \in \lbrace (m_p, m_q), (-m_p, m_q), (m_p, -m_q), (-m_p -m_q) \rbraceに対し,線形合同式mamodp,mbmodqm \equiv a \bmod p, m \equiv b \bmod qを中国人剰余定理により解き, mm を求める. ただし, mm0<n<n2,(mn)=10 < n <\frac{n}{2}, (\frac{m}{n}) = 1を満たすとする.

平方剰余

xZnx \in \mathbb{Z}_n^*に対し,a=x2modna = x^2 \bmod nとなるaZna \in \mathbb{Z}_n^*の集合をQRnZnQR_n \subset \mathbb{Z}_n^*と書き,各aZna \in \mathbb{Z}_n^*を法nnにおける平方剰余という.

また、平方剰余でない要素の集合をQNRn=ZnQNR_n = \mathbb{Z}_n^* \ QRnQR_nと書き、その要素を法nnにおける平方非剰余という.

法が素数の場合の平方剰余

α\alphaZp\mathbb{Z}_p^*の原始元とすると,任意のαZp\alpha \in \mathbb{Z}_p^*は,a=αimodpa = \alpha^i \bmod pと書ける.

  • iiが偶数ならば,aaは平方剰余
  • iiが奇数ならば,aaは平方非剰余

ap12{1modp,aQRn1modp,aQNRn\begin{aligned} a^{\frac{p-1}{2}} \equiv \begin{cases} 1 \bmod p, \quad a \in QR_n \\ -1 \bmod p, \quad a \in QNR_n \end{cases} \end{aligned}

ルジャンドル記号とヤコビ記号

ppが奇素数で,aZpa \in \mathbb{Z}_p^*のとき, ルジャンドル記号を以下で定義する.

(ap):={1,aQRp1,aQNRp(ap)ap12modp\begin{aligned} (\frac{a}{p}) := \begin{cases} 1, \quad a \in QR_p \\ -1, \quad a \in QNR_p \end{cases} \qquad (\frac{a}{p}) \equiv a^{\frac{p-1}{2}} \bmod p \end{aligned}

n=p1e1p2e2prern = p_1^{e_1} p_2^{e_2} \cdots p_r^{e_r}とする. aZpa \in \mathbb{Z}_p^* に対して, ヤコビ記号を以下で定義する.

(an):=(ap1)e1(ap2)e2(apr)er\begin{aligned} (\frac{a}{n}) := (\frac{a}{p_1})^{e_1} (\frac{a}{p_2})^{e_2} \cdots (\frac{a}{p_r})^{e_r} \end{aligned}

  • aQRna \in QR_nならば, ヤコビ記号は1となるが, ヤコビ記号が1であっても, aaが平方剰余になるとは限らない.

法が合成数の場合の平方剰余:

n=pqn = pqとする. aQRna \in QR_nのとき, x2amodnx^2 \equiv a \bmod nの解は, x2amodpx^2 \equiv a \bmod pの解xpx_px2amodqx^2 \equiv a \bmod qの解xpx_pをそれぞれ求め, xp,xqx_p, x_qに中国人の剰余定理を適用することで得ることができる. xp,xqx_p, x_qはそれぞれ2ずつあるため, 解(平方根)は4個存在する.

素数判定アルゴリズム (Rabin法)

アルゴリズムの原理

例題:

課題8.1

素数判定アルゴリズムを用いて, n1=53,n2=55n_1 = 53, n_2 = 55が素数であるか合成数であるかを判定せよ.L=3L = 3とする. (すなわち, 素数の誤判定率164\frac{1}{64}である.)

鍵配送・鍵共有

共通鍵暗号方式を利用する際には, 安全な通信路を用いて, 暗号化・復号鍵を共有しなければならない.

安全な通信路を用意するのは手間がかかるため, 安全ではない通信路を利用して, 通信相手に鍵を送ったり(鍵配送), 共有したり(鍵共有)するための方法があると有益である.

1つの解決法として, 公開鍵暗号方式を利用する方法がある. 共有したい鍵を公開鍵暗号方式で送る方法が考えられる. (公開鍵暗号方式は計算量が大きいので, 鍵の共有のみに利用して, 共有後は高速に動作する共通鍵暗号方式を利用)

Diffie-Hellmanの公開鍵配送方式

1976年に提案された方式であり, 離散対数問題に基づく初めての方式であり, 注目を集めた

例:DH鍵配送方式

DH鍵配送方式の安全性

離散対数問題を解くことが困難であること

  • p1p - 1 が大きな素数を含む素数 pp を選択する
  • pp のサイズは2048ビット以上を推奨
    • 1980年頃 512ビット, 1996年頃 1024ビット推奨

中間攻撃

通信相手を確認することができないため, 通信路の間に入るとなりすますことが可能

公開鍵暗号方式を利用する方式

  • ユーザAA: 公開鍵と秘密鍵の組 (PA,SA)(P_A, S_A) を生成し, PAP_A をユーザBBに送付する.
  • ユーザBB: 共通鍵 KK を生成し, b=EPA(K)b = E_{P_A}(K) をユーザAAに送付.
  • ユーザAA: K=DSA(b)K = D_{S_A}(b) を計算し, 共有鍵とする.

問題点: DH鍵配送方式と同様に中間攻撃(なりすまし)の可能性がある

IDに基づく方式

事前通信が不要な方式

共通鍵暗号方式を用いる方式

Kerberos

鍵配送センター KDC (Key Distribution Center)(利用者 U{A,B,}U \in \lbrace A, B, \cdots \rbraceは事前に秘密鍵 SUS_U をセンターに登録)

課題9.1

Diffie-Hellman公開鍵配送方式において, 3人で鍵を共有する場合の方法についてまとめよ. また, 具体的な数値例を示せ.

まず、準備として、素数 pp を生成し、Zp\mathbb{Z}_p^* の原始元 gg を求め、(p,g)(p, g)を公開する

  • ユーザーアリス:xZpx \in \mathbb{Z}_p^*をランダムに選択し、R1=gxmodpR_1 = g^x \bmod p をユーザーイブに送付する
  • ユーザーイブ:zZpz \in \mathbb{Z}_p^*をランダムに選択し、R2=gzmodpR_2 = g^z \bmod p をユーザーアリスとユーザーボブに送付する
  • ユーザーボブ:yZpy \in \mathbb{Z}_p^*をランダムに選択し、R3=gymodpR_3 = g^y \bmod p をユーザーイブに送付する

お互い送信後:

  • ユーザーアリス:K1=(R2)xmodpK_1 = (R_2)^x \bmod p を計算し、共有鍵とする
  • ユーザーイブ:K1=(R1)zmodp,K2=(R3)zmodpK_1 = (R_1)^z \bmod p, K_2 = (R_3)^z \bmod p を計算し、共有鍵とする
  • ユーザーボブ:K2=(R2)ymodpK_2 = (R_2)^y \bmod p を計算し、共有鍵とする

確認:

  • アリスとイブの秘密鍵:K1=gxzmodpK_1 = g^{xz} \bmod p
  • イブとボブの秘密鍵:K2=gzymodpK_2 = g^{zy} \bmod p

以下は具体的な数値例を示す

準備として、素数 p=23p = 23 を生成し、Zp\mathbb{Z}_p^* の原始元 g=5g = 5 を求め、(23,5)(23, 5)を公開する

  • ユーザーアリス:7Zp7 \in \mathbb{Z}_p^*をランダムに選択し、R1=57mod23=17R_1 = 5^7 \bmod 23 = 17 をユーザーイブに送付する
  • ユーザーイブ:11Zp11 \in \mathbb{Z}_p^*をランダムに選択し、R2=511mod23=22R_2 = 5^{11} \bmod 23 = 22 をユーザーアリスとユーザーボブに送付する
  • ユーザーボブ:15Zp15 \in \mathbb{Z}_p^*をランダムに選択し、R3=515mod23=19R_3 = 5^{15} \bmod 23 = 19 をユーザーイブに送付する

お互い送信後:

  • ユーザーアリス:K1=(22)7mod23=22K_1 = (22)^7 \bmod 23 = 22 を計算し、共有鍵とする
  • ユーザーイブ:K1=(17)11mod23=22,K2=(19)11mod23=22K_1 = (17)^{11} \bmod 23 = 22, K_2 = (19)^{11} \bmod 23 = 22 を計算し、共有鍵とする
  • ユーザーボブ:K2=(22)15mod23=22K_2 = (22)^{15} \bmod 23 = 22 を計算し、共有鍵とする

確認:

  • アリスとイブの秘密鍵:K1=5711mod23=22K_1 = 5^{7 * 11} \bmod 23 = 22
  • イブとボブの秘密鍵:K2=51115mod23=22K_2 = 5^{11 * 15} \bmod 23 = 22

ディジタル署名

電子情報はコピーや改ざんが容易に可能

電子署名: 電子的手段による署名(紙媒体でのサインや印鑑と同じ機能を持たせる)

ディジタル署名:公開鍵暗号を利用して実現される電子署名

  • 暗号化: 暗号化(公開) \Rightarrow 復号(秘密を持っている人のみ)
  • 署名: 署名(秘密) \Rightarrow 検証(公開:誰でもできる)

RSA暗号によるディジタル署名方式

鍵生成

鍵生成

2つの大きな素数 p,q(pq)p, q (|p| \simeq |q|) を生成

  • n=pq,φ(n)=(p1)(q1),(λ(n)=lcm(p1,q1))n = pq, \varphi(n) = (p - 1)(q - 1), \quad (\lambda (n) = lcm(p - 1, q - 1))
  • eZφ(n)e \in \mathbb{Z}_{\varphi (n)} s.t. gcd(e,φ(n))=1\gcd(e, \varphi (n)) = 1 をランダムに選択
  • d=e1modφ(n)d = e^{-1} \bmod \varphi (n) を計算 (ed1modφ(n))(ed \equiv 1 \bmod \varphi (n))
  • h:h: ハッシュ関数

秘密鍵(署名鍵): d,(p,q)d, (p, q)
公開鍵(検証鍵): e,ne, n

文書

文書

  • mm
署名

署名

  • smdmodp(h(m)dmodp)s \equiv m^d \bmod p \quad (h(m)^d \bmod p)
検証

検証

  • vsemodpv \equiv s^e \bmod p
  • v=m(v=h(m))v = m \quad (v = h(m)) を確認

RSA署名方式の問題

  • s(m1)s(m_1): 文書 m1m_1 に対する署名
  • s(m2)s(m_2): 文書 m2m_2 に対する署名

s(m1m2)(m1m2)dmodnm1dm2dmodn(m1modn)(m2modn)s(m1)s(m2)\begin{aligned} s(m_1 \cdot m_2) &\equiv (m_1 \cdot m_2)^d \bmod n \equiv m_1^d \cdot m_2^d \bmod n \\ &\equiv (m_1 \bmod n) \cdot (m_2 \bmod n) \equiv s(m_1) \cdot s(m_2) \end{aligned}

攻撃:

  1. 文書 mm に対する署名 s(m)s(m) を入手し, s(m)1modns(m)^{-1} \bmod n を計算する
  2. y=xmmodny = x \cdot m \bmod n に対する署名を入手(適応的選択文書攻撃)
  3. 偽造署名 s(x)=s(y)s(m)1modn=s(x)s(m)s(m)1modns(x) = s(y) \cdot s(m)^{-1} \bmod n = s(x) \cdot s(m) \cdot s(m)^{-1} \bmod n を計算

RSA-PSS署名方式

1996年 Bellare, Rogaway

公開鍵暗号方式の問題点(なりすまし)

公開鍵認証基盤(PKI: Public Key Infrastrucure)

公開鍵暗号を用いた署名付き鍵配送方式

ElGamal暗号を利用した署名方式

鍵生成

鍵生成

素数 p,Zpp, \mathbb{Z}_p^* の原始元 α\alpha を求める

  • xZp1x \in \mathbb{Z}^{p-1} をランダムに選択し, y=axmodpy = a^x \bmod p を計算する
  • h:h: ハッシュ関数

秘密鍵(署名鍵): xx
公開鍵(検証鍵): y,α,py, \alpha, p

文書

文書

  • mm
署名

署名

(t,s)(t, s), 乱数 rZp1r \in \mathbb{Z}_{p-1}^*

  • tαrmodpt \equiv \alpha^r \bmod p
  • sr1(mxr)modp1s \equiv r^{-1}(m - xr) \bmod p - 1
    • sr1(h(m)xr)modp1s \equiv r^{-1} (h(m) - xr) \bmod p - 1
検証

検証

  • αmyttsmodp(αh(m)yttsmodp)\alpha^m \equiv y^t t^s \bmod p \quad (\alpha^{h(m)} \equiv y^t t^s \bmod p) の一致を確認

ytts(αx)tαrmxtrαmy^t t^s \equiv (\alpha^x)^t \cdot \alpha^{r \cdot \frac{m - xt}{r}} \equiv \alpha^m

ElGamal署名方式の安全性

偽造について, gcd(v,p1)=1\gcd(v, p - 1) = 1 を満たす v,uv, u を定める

  • t=αuyvmodp,s=tv1modp1t = \alpha^u y^v \bmod p, s = -tv^{-1} \bmod p - 1
  • m=sumodp1m = su \bmod p - 1 とする
  • tsαsuysvαmytmodpt^s \equiv \alpha^{su} y^{sv} \equiv \alpha^m y^{-t} \bmod p

(t,s)(t, s)mm に対する署名となっている

偽造防止のためには, 文書 mm はそのまま利用せず, ハッシュ関数を利用する

DSA署名(Digital Signature Algorithm)

アメリカの連邦標準技術局(NIST)により提案されたディジタル署名標準. ElGmal署名を基にして作られている. (署名サイズが小さい)

鍵生成

鍵生成

素数 p,qp, q s.t. q  (p1)q \ |\ (p - 1) を生成する. 乗法群 Zp\mathbb{Z}_p^* で位数が qq となるような α\alpha を求める

  • xZqx \in \mathbb{Z}_q をランダムに選択し, y=axmodpy = a^x \bmod p を計算する
  • h:h: ハッシュ関数

秘密鍵(署名鍵): xx
公開鍵(検証鍵): y,α,p,qy, \alpha, p, q

文書

文書

  • mm
署名

署名

(t,s)(t, s), 乱数 rZp1r \in \mathbb{Z}_{p-1}^*

  • t(αrmodp)modqt \equiv (\alpha^r \bmod p) \bmod q
  • sr1(h(m)+xt)modqs \equiv r^{-1} (h(m) + xt) \bmod q
検証

検証

  • t(αh(m)s1yts1modp)modqt \equiv (\alpha^{h(m) s^{-1}} y^{ts^{-1}} \bmod p) \bmod q の一致を確認

ブラインド署名(RSAタイプ)

電子現金や電子投票など, 内容については知られたくないが, 署名は付けて内容を保証したいという状況のときに利用する.

ブラインド署名

ネットワーク上では通信相手が正しい相手かどうかを確認する手段が必要(なりすましの可能性を排除したい)

認証を実現する方法:

  • 使い捨てパスワード(ワンタイムパスワード)を利用
  • 共通鍵暗号を利用
  • 公開鍵暗号を利用
  • ディジタル署名を利用
使い捨てパスワードを利用した認証

使い捨てパスワードを利用した認証

  • ff: 一方向性関数
  • nn: 必要なパスワードの数
  • rr: 乱数

使い捨てパスワードを生成し, 安全な場所に記憶する. p1=f(r),p2=f(f(r)),,pn=f((f(r)))p_1 = f(r), p_2 = f(f(r)), \cdots, p_n = f(\cdots(f(r)) \cdots). pnp_n から順に使用. 1度使用したら捨てる

使捨てパスワード生成器を利用

共通鍵暗号認証

共通鍵暗号を利用した認証

  • EKE_K: 暗号器
  • DKD_K: 復号器
  • KK: 共通鍵

認証手順: PP: 証明者, VV: 検証者

  1. VPV \Rightarrow P: 乱数 rr を生成し, x=EK(r)x = E_K(r)PP に送信
  2. PVP \Rightarrow V: xx を復号して r=DK(x)r = D_K(x) を取り出し, 一部を変形して(半分をビット反転する等) rr' を作る. y=EK(r)y = E_K(r') を計算し, VV に送信
  3. r=DK(y)r' = D_K(y) と (rr の変形) rr' が一致するか確認
公開鍵暗号認証

公開鍵暗号を利用した認証

  • EKeE_{K_e}: 暗号器
  • DKdD_{K_d}: 復号器
  • KeK_e: 共通鍵
  • KdK_d: 秘密鍵

認証手順: PP: 証明者, VV: 検証者

  1. VPV \Rightarrow P: 乱数 rr を生成し, x=EKe(r)x = E_{K_e(r)}PP に送信
  2. PVP \Rightarrow V: t=DKd(x)t = D_{K_d(x)} を計算し, VV に送信
  3. ttrr が一致するか確認
ディジタル署名認証

ディジタル署名を利用した認証

  • VKV_K: 検証器
  • SKS_K: 署名器
  • KeK_e: 検証鍵
  • KSK_S: 署名鍵

認証手順: PP: 証明者, VV: 検証者

  1. VPV \Rightarrow P: 乱数 rr を生成し, PP に送信
  2. PVP \Rightarrow V: 署名 t=SKS(x)t = S_{K_S(x)} を計算し, VV に送信
  3. 検証 VKe(r,t)V_{K_e(r, t)} が正しいか確認

零知識対話証明(ZKIP: Zero Knowledge Interactive Proof)

1985年 Goldwasser, Micali, Rackoff により提案

秘密に関する知識は一切漏らさず, その秘密をもっているという事実のみを相手に証明する

性質:

  • 完全性: 検証者は証明者の主張がであるとき, 圧倒的に高い確率で真であると判定する
  • 健全性: 検証者は証明者の主張がであるとき, 圧倒的に高い確率で偽であると判定する
  • 零知識性: 検証者は証明者から何の知識も得られない

洞窟の問題(零知識対話証明)

状況:

VV は洞窟の奥にある扉を開ける合言葉を知りたい. 合言葉は PP が知っているので, お金を払って合言葉を買いたいが, 本当に PP が正しい合言葉を知っているか確認して買いたい. PP は合言葉を教えると, VV がお金を払ってもらえないと考えている. そこで合言葉を教えることなく正しい合言葉であることを証明したい

洞窟の問題の解決案

Fiat-Shamir認証方式

高次Fiat-Shamir認証方式

Schnorrの認証方式

課題11.1

零知識対話証明を利用した認証方式であるFiat-Shamir認証方式, あるいは, 高次Fiat-Shamir方式の具体的な数値例を示せ. ただし, Fiat-Shamir認証方式の繰り返し回数は1回で良い.

Fiat-Shamir認証方式:

二つの素数:p=101,q=23p = 101, q = 23 を選択し、n=p×q=2323n = p \times q = 2323

sZns \in \mathbb{Z}_n^* をランダムに選択し、ここで、s1=5,s2=7,s3=3s_1 = 5, s_2 = 7, s_3 = 3 を選択し、v=s2modnv = s^2 \bmod n をそれぞれ計算し、v1=25,v2=49,v3=9v_1 = 25, v_2 = 49, v_3 = 9 が得られた。

認証手順において、乱数 r=13r = 13 と生成し、x=r2modn=169x = r^2 \bmod n = 169VV に送信する

ei={0,1}e_i = \lbrace 0, 1 \rbrace をランダムに選択し、ここで、e1=1,e2=0,e3=1e_1 = 1, e_2 = 0, e_3 = 1 を利用した。PP に送信する

yi=seirmodn=195y_i = s^{e_i} \cdot r \bmod n = 195 を計算し、VV に送信する

VVyi2y_i^2veixv^{e_i} \cdot x と一致するか確認する。ここで、yi2=857=veixy_i^2 = 857 = v^{e_i} \cdot x が確認された。

1
2
3
4
5
6
7
py .\fiat-shamir.py

n = 2323
x = 169
y = 195, y^2 = 857
v1 = 25, v2 = 49, v3 = 9
y2 = 857

電子マネー・電子投票

暗号技術の応用

これまでに紹介してきた暗号技術を利用することで、ネットワーク上で安全に利用できる様々なシステムを実現

システムの例:

  • 電子現金
  • 電子投票
  • 電子契約
  • 電子オークション

電子現金の条件

電子現金の必須条件完全情報化, 安全性, 匿名性

  • 完全情報化:現金が完全に情報のみで自立して実現されていること
  • 安全性:電子現金のコピー, 偽造等による不正利用ができないこと
  • 匿名性:利用者の購買に関するプライバシが, 小売店や電子現金発行・決済者が結託しても露見しないこと
  • オフライン検証性: 小売店での電子現金支払いのときの処理がセンターなどに問い合わせることなく, オフラインで処理できること
  • 譲渡可能性: 電子現金の他人への譲渡が可能であること
  • 分割利用可能性: 1回発行された電子現金を, 利用合計金額が額面の金額になるまで何回でも使うことができること

電子財布型電子現金

電子財布の発行:

銀行 BB は, 各電子財布に識別番号 ii ならびに署名鍵と検証鍵の対 (si,vi)(s_i, v_i) を作成し, さらに viv_i に対する銀行 BB の証明書(Bの署名 SB(vi)S_B(v_i) )を作成する. 電子財布には, (i,si,vi,SB(vi),vB)(i, s_i, v_i, S_B(v_i), v_B) を格納する.

支払処理:

電子財布 ii から電子財布 jjxx 円払う.

オンライン検証型電子現金:ブラインド署名を利用した電子現金

お釣り

この方式では, 支払い時に下ろした金額と同じ金額を支払うことが前提

支払額はお金を銀行から下ろした後に決定することが多いので, 下ろした金額以内の任意の金額で支払いができる方が利用しやすい

金額の構造

電子現金の額面の金額を RSA 暗号のべきの値 ee に対応づける

例:

  • 1円: e=3e = 3
  • 2円: e=5e = 5
  • 4円: e=7e = 7
  • 8円: e=11e = 11

小銭瓶方式(おつりを1つにまとめる方式)

電子投票の条件

  • 不正投票の防止:選挙管理簿に登録されている有権者のみが投票権をもち, 1回のみ投票ができる
  • 改ざん/水増しの防止:正しく投票された投票結果が改ざんされたり, 水増しされたりしない
  • 無記名性:誰が誰に投票したかは秘密である
  • 公平性:選挙が終了するまで, 誰も投票の途中経過を知って利用することができない
  • 無証拠性:誰に投票したかの証拠となるものがない

電子投票の方式

  • ミックスネット方式(Mixnet)
  • ブラインド署名を利用した方式
  • 高次剰余暗号を利用した方式
  • マルチパーティプロトコルを利用した方式

高次剰余暗号を利用する方式

ミックスネットを利用する方式

ElGamalシャッフル
他のシャッフル

ブラインド署名を利用する方式

秘密分散法

分散環境

  • 分散ストレージ: データの信頼性を向上
    • データの冗長化
    • データの修復
    • 負荷分散

秘密分散法

  • U1,,Un:nU_1, \cdots, U_n: n 人の利用者
  • D:D: 分配者 D{U1,,Un}D \notin \lbrace U_1, \cdots, U_n \rbrace
  • p:p: 素数 n<pn < p
  • sZp:\color{red}{s \in \mathbb{Z}_p}: 秘密

各利用者 UiU_i には, IDとして, diZpd_i \in \mathbb{Z}_p を割り当てる. (did_i は重複しない, すなわち, iji \neq j のとき, didjd_i \neq d_j) 分配者 DD は, 各利用者 UiU_i に, シェア siZps_i \in \mathbb{Z}_p を配布.

(k, n)しきい値法:

  • n 人のうち任意の k 人のシェアを集めると秘密sを復元できる.
  • k 人より少ない人数のシェアを集めても秘密sを復元できない

Shamirの(k, n)しきい値法

視覚復号型秘密分散方式

視覚的に秘密情報を復元する秘密分散方式

秘密分散法による暗号の多重化

検証可能秘密分散方式

秘密分散方式と零知識対話証明を用いて、検証可能秘密分散方式を実現

  1. 秘密 ss をもつ分配者は, ssc(s)c(s) に暗号化し, それを利用者 Ui,i=1,,nU_i, i = 1, \cdots, n に送付する.
  2. 分配者は, 秘密分散方式を用いて, 利用者 Ui,i=1,,nU_i, i = 1, \cdots, n にシェア sis_i を送付する.
  3. 分配者は, 各利用者のシェアが上記の手順で正しく処理されていることを零知識対話証明を用いて示す.

Feldmanの検証可能秘密分散方式

検証:

利用者 UiU_i は, αsi\alpha^{s_i}G0G1di1G2di2Gk1dik1G_0 G_1^{d_i^1} G_2^{d_i^2} \cdots G_{k-1}^{d_i^{k-1}}pp を法として等しいかを確認する. 等しければ, sis_i は正しいシェアである.

課題13.1

Shamirの(3,3)しきい値秘密分散方式の具体的な数値例を示せ.

  • p=11p = 11
  • U1,U2,U3:U_1, U_2, U_3: 利用者 d1=1,d2=2,d3=3:d_1 = 1, d_2 = 2, d_3 = 3: ID
  • s=7:\color{red}{s = 7}: 秘密

ランダムk1k - 1 次多項式の生成: f(x)=7+6x+5x2f(x) = 7 + 6x + 5x^2

シェアの生成

  • s1=f(d1)=7+6+5mod11=7s_1 = f(d_1) = 7+6+5 \bmod 11 = 7
  • s2=f(d2)=7+12+20mod11=6s_2 = f(d_2) = 7+12+20 \bmod 11 = 6
  • s3=f(d3)=7+18+45mod11=4s_3 = f(d_3) = 7+18+45 \bmod 11 = 4

秘密の復元: (d1,s1),(d2,s2),(d3,s3)(d_1, s_1), (d_2, s_2), (d_3, s_3) を通る f(x)f(x) を求める

秘密 s=f(0)=7s = f(0) = 7

1
2
3
4
5
py .\shamir_tn_threshold.py

original: 7
shares: [(1, 7), (2, 6), (3, 4)]
restored: 7

秘匿計算

秘密計算・秘匿検索

データを秘匿したまま結合分析

秘密計算の実現法

  • 秘密分散法を用いた方式(マルチパーティプロトコル)
  • 準同形暗号を用いた方式
  • 完全準同形暗号を用いた方式
  • Garbled circuit を用いた方式

回路計算

計算機が処理する関数 ff は, AND, NOT, XOR の論理ゲートの組み合わせて記述可能

a,b{0,1}a, b \in \lbrace 0, 1 \rbrace に対して, それぞれ以下で計算できる

  • AND:aba \cdot b
  • NOT:a=1a\overline{a} = 1 - a
  • XOR:ab=a+b2aba \oplus b = a + b - 2a \cdot b

加算(減算) と乗算ができれば, 任意の処理ができることになる

準同形暗号を用いた秘密計算

秘密分散法を用いた秘密計算

計算について

参考文献