ExcelEx

公開鍵暗号を使った暗号化と復号

A small RSA encoding and decoding by Excel without using a VBA macro. Takashi Yamanoue, Fukuyama University.

  • 送信者、受信者の間の通信が第三者から観測されても、その通信の内容がその第三者にわからないように、暗号化したいことがあります。たとえば、パスワードや、クレジットカード番号や、個人情報などを送受信するとき、それが第3者に知れてしまうと、財産や、ときには生命が危険にさらされる可能性があります。
  • 送信側では、元の文である「平文」を「暗号化」し、それによって得られた暗号を受信者に送ります。
  • 受信側では、暗号を受け取り「復号」して、元の平文を取り出します。
  • 暗号化するとき「共通鍵」暗号方式が使われることがあります。これは、送受信者共に、同じ「共通鍵」という情報を使って、暗号化と復号を行う方法です。
  • 共通鍵暗号で通信するとき、その通信を始める前に、どのようにして、相手に鍵を送るか?という問題が発生する場合があります。たとえば、電話で鍵を伝えた場合、その通話内容が盗聴されると、第三者に通信の内容が漏えいしてしまう可能性が発生します。
  • この問題を解決する方法の一つに、「公開鍵暗号」方式を使った暗号化と復号の方法があります。
  • 公開鍵暗号では、暗号を受信する側が、「公開鍵」と「秘密鍵」のペアを作成し、公開鍵を公開し、秘密鍵は外部には秘密にしておきます。
  • 送信者は、受信者が公開した公開鍵を使って平文を暗号化し、生成された暗号を受信者に送信します。
  • 受信者は、秘密鍵を使って暗号文を復号し、平文に戻します。公開鍵で暗号化された平文は、そのペアである秘密鍵を使わないと復号できない(復号が非常に困難な)ようになっています。
  • このため、共通鍵方式のように、鍵の配送に頭を悩ます必要がなくなります。
  • 公開鍵暗号方式の代表的なものが、RSA公開鍵暗号です。

RSA 公開鍵暗号

  • RSA公開鍵暗号方式の計算を表計算で行います。

RSA 公開鍵暗号は、以下の式を計算して、暗号化、復号を行います。

公開鍵と秘密鍵の生成

  • 公開鍵<n, e>, 秘密鍵<n,d>(n,e,dは整数)を以下のように計算します。
    • n = p*q (p,q は異なる素数)
    • L=lcm(p-1, q-1)
    • e は L とは互いに素である数で、Lより小さな数。
    • d は、1=ed (mod L) となる数。

暗号化

  • M は平文で、1 <M < n
  • C は暗号文
  • <n, e> は公開鍵
  • <n, d> は秘密鍵
  • 暗号化: C=(M^e)(mod n)

復号

  • 復号: M=(C^d)(mod n)

計算表の実際

  • p,q, e, M を与えることで、上の、暗号化、復号、公開鍵、秘密鍵を計算します。
    • 暗号化と復号を行うとき、上の式をそのまま使うと、小さなM,C, e, d でも、非常に大きな数の余りを計算することになって、現実的ではありません
      (Windows の電卓だと、結構、大きな桁数の計算を行うことはできます)。
    • 実際の暗号化で使われているような大きなM,C,e,d は使えませ んが、授業でやってみることができるような桁数(3桁程度)までの計算を行うことができる表を作っています。
    • 表を vlookup で検索することにより、計算を行っています。
    • マクロは使いません。

画面キャプチャ

鍵ペアの生成と、暗号化と復号の例(シート「鍵生成」)

  • public-key-3-key.jpg

主要なセルの計算式

  • 公開鍵、秘密鍵の計算
    • B7 (n=p*q)
      =B5*B6
    • B9 (=lcm(p-1,q-1))
      =LCM((B5-1),(B6-1))
    • B12 (... Lとeが互いに素であることの確認)
      =GCD(B10,B9)
    • B14 (1=ed (mod L) であるような dを検索)
      =VLOOKUP(1,A20:B228,2,FALSE)
    • A20 (d を見つけるための, ed (mod L)の計算)
      =MOD(B$10*B20,B$9)
    • B20 (d を1から並べる)
      1
    • A21 以降の A* (A20のコピー)
    • B21
      =B20+1
    • B22 以降の B* (B21のコピー)
  • 暗号化
    • G9 (暗号化の式, C=M^e(mod n))
      =VLOOKUP(B10,F20:G161,2,FALSE)
  • 暗号化で使う表
    • F20 ... e を1から並べる
      1
    • F21
      =F20+1
    • F22 以降は、F21をコピー
    • G20 ... e が 1のときの、M^e (mod n)=M (mod n)
      =MOD(G$6,$B$7)
    • G21 ... e が 2のときの M^e (mod n)= M*(M^ (e-1)(mod n)) (mod n)
      =MOD(G$6*G20,$B$7)
    • G22 以降は G21をコピー
  • 復号
    • L9 (暗号化の式, M=C^d(mod n))
      =VLOOKUP(B14,K20:L177,2)
  • 復号で使う表
    • K20 ... d を1から並べる
      1
    • K21
      =K20+1
    • K22 以降は、F21をコピー
    • L20 ... d が 1のときの、C^d (mod n)=C (mod n)
      =MOD(L$6,$B$7)
    • L21 ... d が 2のときの C^d (mod n)= M*(M^ (d-1)(mod n)) (mod n)
      =MOD(L$6*L20,$B$7)
    • L22 以降は L21をコピー

上の鍵ペアを使った、短い文の暗号化と復号の例(シート「暗号化・復号例」)

  • public-key-3-endecode.jpg

主要なセルの計算式

  • B5...M5 : 下の行(B6...M6)に並んでいる文字の、左から数えたときの番号
    • B5
      1
    • C5
      =B5+1
    • D5から右は, C5をコピー
  • B6... M6 : 入力された平文, 1つのセルに1文字。
  • B7...M7 : B6 ... M6 の文字をASCIIコードで表したときの数
    • B7
      =CODE(B6)
    • C7から右は, B6をコピー
  • B8... M8 : 各文字が暗号化された結果が格納されている場所
    • B8
      ="'code-"&B5&"'!B7"
    • C8から右は, B8をコピー
  • B9 ... M9 : 上の場所にある暗号化された結果を表示
    • B9
      =INDIRECT(B8)
    • C9から右は, B9をコピー
  • B11... M11 : 暗号化された平文を復号した結果が格納されている場所
    • B11
      ="'code-"&B5&"'!G7"
    • C8から右は, B8をコピー
  • B12 ... M12 : 上の場所にある復号された結果を表示
    • B12
      =INDIRECT(B11)
    • C12から右は, B12をコピー

上の暗号化と復号の例で利用する、x番目の文字の暗号化と復号のためのシート 「code-x (x=1,...,)」

  • public-key-3-c-1.jpg
  • code-1, code-2, ... 内のすべての式は同じです。code-1 を作って、それを、code-2, code-3, ... にコピーしているだけです。

主要なセルの計算式

  • K4: このシート名を取得
    =RIGHT(CELL("filename",A2),LEN(CELL("filename",A2))-FIND("]",CELL("filename",A2)))
  • K5: code-x の xを取り出す。
    =MID(K4,6,LEN(K4)-5)
  • K7: このシートが暗号化・復号を担当する文字がある場所
    ="暗号化・復号例!"&CHAR(CODE("A")+K5)&"7"
  • K8: 取り出した文字
    =INDIRECT(K7)

Excelの表


参考文献


Counter: 4298, today: 1, yesterday: 1

添付ファイル: filepublic-key-3.xlsx 1064件 [詳細] filepublic-key-3-key.jpg 751件 [詳細] filepublic-key-3-old-20151031.xlsx 286件 [詳細] filepublic-key-3-c-1.jpg 596件 [詳細] filepublic-key-3-endecode.jpg 639件 [詳細] filepublic-key-2.xlsx 363件 [詳細] filepublic-key-2.jpg 377件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-10-06 (木) 08:12:26 (567d)