2021년 11월 17일 수요일

[양자암호 시리즈 3 (完) ] 量子耐性技術と格子暗号化 (양자내성기술과 격자암호화)

일본에서 일하면서 회사 테크블로그에 글을 게시하고 있습니다.

부족한 일본어지만, 이전에 제 블로그에 투고한 글들을 정리하고

관련테마로 새롭게 조사한 내용도 있기에 번역기로 살펴보시면 좋을것 같습니다.



     「目次」

  1. QKD (量子キー分配)
  2. PQC (量子耐性暗号)
  3. GGHで見る格子暗号化

量子コンピュータの活用でRSA暗号化が攻撃できることを知った時は
2010年の大学図書館からでした。
実際にRSA暗号化がネットワーク世界で持つ影響力を知った時は
その4年後、大学3年生のコンピュータ保安講義からでした。

そしてまた2年後の2016年からNIST(National Institute of Standards and
Technology / 米国国立標準技術研究所)が
IBM、Amazon、Google、MSなどのIT企業と一緒に
RSA暗号化体系の崩壊に備えて量子耐性暗号化の標準化を進んでいました。
最初に提案された82個のアルゴリズムから分析と評価を重ねて
最近の3ラウンドまで残ったアルゴリズムは7個、
そしてその中で格子暗号化に基盤したものが5つでした。
3ラウンドで複数の候補が選択され、
2024年まで最終選択されるアルゴリズムとして以後の標準化が進行されます。

量子耐性技術には
ハードウェア基盤の量子キー分配(Quantum Key Distribution、QKD)と
ソフトウェア基盤の量子耐性暗号(Post Quantum Cryptography、PQC)
がありました。


QKDとPQCの概念図


1. QKD (量子キー分配)

QKDは既存の通信チャネル以外に量子キー分配装置と量子チャンネルを築いて
光子などの量子の状態がワンタイムキーになります。
量子力学によって量子の状態をコピーすることは量子間の絡み状態を崩して
中間にそんな盗聴がある場合にすぐ盗聴者がいることが見つかります。

ここで量子の絡みとは量子重畳と共に量子の代表的な性質です。
一つの量子を割って2つの量子を作ると
2つの量子は絡んでいてどんなに遠い距離でも(干渉がない場合)
繋がっています。一つの量子を観測すると
1000km、10000km距離の双子の状態も
量子重畳からあの一つの状態まで同時に決定されるので
これで通信ができます。

ちなみに、特殊相対性理論によって宇宙のどんなものも
(物質だけではなく情報も含めて)
実量が0で最大速度(秒速30万キロメートル)が可能な光より
速いものはありえないです。
量子絡みでは3000万キロメートルに離れていても
すぐ通信できそうな仕組みに見えて
最初は特集相対性理論を違反することができたかと思われました。
「QKDで伝える情報は光より速いのか」という論難がありました。
しかし量子状態の決定は光より速いですが、
それで伝えられるものは情報ではなく、ただ量子生成に使われる難数で、
実際のデータも既存の通信ネットワークで電送されます。
そのため情報が光より速いことではありません。

QKD関連情報でよく見える国家は中国でした。
中国は私が高校生だった2000年代後半から
200kmほどの都市間量子キー分配に成功して
科学書でそれを使って暗号キーを作る記事もよく見ました。
エドワード・スノーデンさんの事件、アメリカの中国通信企業制裁を見ても
国家間の通信保安は大事なことなので量子暗号化技術を
その広い地域を守る盾だと判断したようでう。
もちろん矛も量子技術の量子コンピュータになりますね。

有線(光ケーブル)では32個の連絡点を活用して
2000kmの量子キー分配に成功しました。
連絡点間の平均距離は80kmほどで、速度は20~30kbpsでした。

ほとんど真空状態である宇宙空間を活用すると光ケーブルより安定的に
無線通信(レーザー)が可能です。
人工衛星量子通信でも中国が世界最初の量子通信衛星
「墨子号、Micius」を活用しました。


量子通信人工衛星の概念図


中国のペキンからオーストリアのウィーンまで7,600kmの距離で
QKDが成功しました。
地上連絡点たちが送ったレーザー信号を墨子号が反射させて
他の連絡点に送る原理です。
80kbitの量子暗号キーでペキンはウィーンまで5.34kBの墨子号の写真を、
ウィーンからは4.9kBのシュレーディンガー
(量子力学に寄与したオーストリアの物理学者)
の写真が伝えられました。
晴れた日と、正確な光軸整列が必要で
速度は1000kmで3kbps、600kmでは9kbpsでした。

ちなみに、日本は2018年から2027年まで量子技術を活用した
社会/経済的な目標達成のため「Q-LEAP」R&Dプログラムを運営しています。
2019年基準で量子コンピュータ特許件数はアメリカ(500件)のあとで2位(200件),
量子暗号特許件数は中国(450件)、アメリカ(250件)のあとで3位(200件)でした。
Toshibaは世界で一番速いQKD装置を作ったそうです。
やはり日本は科学的にベースになる技術は逃さないですね。

ここまでQKDの話でした。ご覧の通りQKDはハードウェア的に
大きいスーケルなので国家または大企業中心に進行されていました。
ところで格子暗号化などが含められている
PQCはソフトウェア的なアルゴリズムだけで量子コンピュータに対応できます。


2.PQC

量子耐性暗号(PQC)は
量子ハードウェア、量子ソフトウェアの発達と組合で
量子コンピュータの情報処理効用がディジタルコンピュータを超える時が来ても
(量子優位、[Quantum supremacy])
ネットワークに使える暗号化です。

RSAが量子コンピュータのため危機になった理由は
量子コンピュータに適応可能なショアアルゴリズムが1994年に
発明されたためで、カウンターパンチを食らわなかった
AES対称鍵暗号は既存AES-128、AES-192の代わりに
もっと大きい暗号キー基盤のAES-384を使うことだけで
一応量子コンピュータの性能脅威から安全です。

AESの状況に付け加えると、
1996年に発明されたLov GroverのGroverアルゴリズムが対称鍵暗号である
AESの敵になります。
Groverアルゴリズムは整列されなかったN個のデータの中で
特定のデータを探す量子アルゴリズムです。
ディジタルコンピュータでは非整列探索すると最大O(N)の検索回数が必要ですが
量子コンピュータでGroverアルゴリズムならO(√N)になります。
量的な問題なのでAESは一応暗号キーを増えることで
量子コンピュータから逃げました。

素因数分解の難しさに基盤するRSA、ブロックチェーン暗号化は
アルゴリズム的にショアのアルゴリズムが動作する量子コンピュータから
解体されます。
専門家たちは現在一番強力なブロックチェーン暗号化も
10~15年以内に量子コンピュータのため解体されると言っています。
(不思議にユーチューブで見た格子暗号化講義動画の大学教授、
企業の保安担当者もRSAの限界を2030年だと見ていました。)
量子コンピュータのため社会の保安ネットワークが崩れる日は
Q-dayという名称で言われました。

そして暗号化だけではなく量子コンピュータそのものが地震などの
自然災害の予測、材料工学などの発展にも使い道があるので
製造業基盤でITネットワーク依存度が高い日本、韓国のような国家なら
もっと重要な技術だと考えました。

私は10年前からこのような背景知識のため
素因数分解基盤のビットコインなどに目を閉じていましたが
何でしょうか、その上げ潮は。しばしば悲しいです..


3.GGHで見る格子暗号化

GGHはRSAのように開発者たちのイニシャルから付けられた格子暗号で
1995年に提案されました。(Goldreich–Goldwasser–Halevi)
現実的に使えられる最初の公開鍵基盤の格子暗号です。
今日には保安的に完全に崩れましたが
比較的にシンプルな仕組みを持っていて
格子がどのように暗号化に使えられるのかを見やすいです。


2次元と3次元の座標系

我々は幼い時から数学で座標系をよく見てきました。
2次元と3次元の座標系がよく見えて
4次元からは人間の頭としては想像ができなくて数学的にだけ表現できます。
ここで格子(Lattice)はその座標系にある点が規則的に反復されて
あの格子縞として配置される集合を言います。
そして格子を構成するその点を格子点(Lattice Point)だと言います。


2次元では2つの基底ベクトル(basis vector)で構成される格子空間


そのような格子ができると、格子点たちの間にある特定なパターンも
無限に反復されます。
そのパターンはベクトルとして基底ベクトル(Basis Vector)になります。
逆に言えば格子点はその基底ベクトルとして決定されます。
そういうことは結局この格子が基底ベクトルとして決定されますね。
基底ベクトルにはその格子空間を決定する情報があるので
格子暗号化でPrivateBasisVector、つまり秘密鍵になります。
(以下Privateベクトル)

N次元の格子座標系はN個の基底ベクトルで表現されます。
そして格子の基底になるベクトルは多様に構成できますので
2次元で作られる基底ベクトルも無数にあります。

この格子と連関された格子問題として
SVP(Shortest vector problem)
CVP(Closest vector problem)
などがあります。格子暗号化はこの格子問題を活用します。
GGHはCVP基盤で、Privateベクトルで作った
PublicBasisVector(以下Publicベクトル)と、NoiseVectorが公開鍵になります。


格子空間で一番短いベクトルを探すSVP問題(左側)
格子空間にはない任意のベクトルが与えられた時、
そのベクトルと一番近い格子空間のベクトルをさがすCVP問題(右側)


それでは格子を感じながらGGHを試して見ましょう。
ここでは2次元のGGHなので2個の基底ベクトルがあります。
ユーチューブでJeff Suzuki様の動画とWikipediaを参照しました。

_Jeff Suzuki様のユーチューブGGH講義
_WikipediaのGGH暗号化ページ

Aliceさんは秘密鍵として直交する基底ベクトルである
Privateベクトルとしてv1、v2を持っています。
v1 = (1, 45)
v2 = (45, -1)
「ベクトルの直交条件:v1・v2 = 0」

そしてこのPrivateベクトルを組み合って
Publicベクトルとしてw1、w2を作ります。
そのw1、w2はほぼ平行しています。
w1 = (226, 40) [ v1 * 1 + v2 * 5 ]
w2 = (1853, 319) [ v1 * 8 + v2 * 41 ]
「ベクトルの平行条件:w1・w2 = ±|w1||w2|、
 ここでは431538 ≒ 430520」

Publicベクトルと共に公開鍵としてNoiseベクトルがあります。
Noiseベクトルはここでは[-10 <= (rx, ry) <= 10]の範囲で選びます。
ここでは-9と2を選びました。
r = (-9, 2)

Noiseベクトルの範囲の基準はBabai's rounding techniqueに従うそうです。
後に見ますが、暗号文を復号化する時に四捨五入が使われます。
その時Noiseベクトルが充分に小さくと平文だけを残して
Noiseベクトルの部分は無視できます。
その四捨五入のためPrivateベクトルは直交する必要がありました。
その基準を決めることがBabai's rounding techniqueですが、
ここでは格子暗号の流れだけを見るつもりです。

_Babai's rounding technique関連PDF


さ、とうとうBobさんがAliceさんにメッセージを送ります。
送る平文は(35, 27)です。RSAのようにGGHの暗号化は
平文を公開鍵として暗号化します。
m = (35, 27)

「暗号化」
_1
平文とPublicベクトルの線形結合
35 * w1 + 27 * w2 = (57941, 10013)

_2
そこでNoiseベクトルを足します。
(57941, 10013) + (-9, 2) = (57932, 10015)
         r

暗号化完了です。
BobさんはネットワークでAliceさんに
(57932, 10015)を送ります。
それではAliceさんは

「復号化」
_1
自分だけ知っているPrivateベクトルとして(a1, a2)を求めます。
a1 * (1, 45) + a2 * (45, -1) = (57932, 10015)
   v1      v2

_2
a1は≈251.04、a2は≈1281.799なので
小数点を四捨五入したら(a1, a2)は(251, 1282)になります。

_3
Noiseベクトルの効果は四捨五入として消されました。
Privateベクトルとしてこの格子空間が元々どのような空間かを
知っているAliceさんは、(a1, a2)として
この格子空間にありえる、元々のClosest vectorを求められます。
251 * (1, 45) + 1282 * (45, -1) = (57941, 10013)
   v1      v2

_4
NoiseベクトルがあったためBobさんが送った(57932, 10015)は
Aliceさんが持っている基底ベクトル(Privateベクトル)で作れない
この格子空間にありえないベクトルでした。
それが四捨五入のためこの格子空間にある
元々のBobさんのベクトル、
一番近くのベクトル(Closest vector)を探したことです。
それではこのベクトルで求める平文は、
m1 * (226, 40) + m2 * (1853, 319) = (57941, 10013)
    w1       w2
(m1, m2) = (35, 27)、平文が求められました。

悪いこころのTrudyさんが
Bobさんが送った暗号化データである(57932, 10015)を覗き見たくて
Noiseベクトルの除去なしで四捨五入して復号化すると
ちょっと別の平文が出ます。
m1 * (226, 40) + m2 * (1853, 319) = (57932, 10015)
    w1       w2
(m1, m2) = (38, 27)

今は原理を見るため2次元格子空間でGGHが進行されましたが
実使用には300次元までも使います。人間の頭では想像できなくても
数学的にはそのような格子空間でClosest vector problem問題で
暗号化することができます。

Noiseベクトルはここで400個の別のベクトルを作りました。
(-10~10範囲で2個の数にNoiseを与えました。[20*20=400])
      (57941, 10013)
すなわち、TrudyさんがNoise問題を無くすためには
400回の試しが必要です。
ところでこれは2次元チュートリアルで、300次元でNoiseがあると
20^300 = 10^390個の候補ベクトルが生成されます。

そしてこのように深い次元の格子暗号化に対して
素因数分解、離散対数の既存の公開鍵暗号を解体させられる量子コンピュータも
まだ解体させる適当なソリューションがありません。

GGHは提案された近くで暗号攻撃が提案されました。
そこで350次元までは暗号攻撃で平文が復号化されました。
GGHが安全するためには400次元以上のパラメータが必要でした。
GGHの短所は持っている格子空間ほどの長い公開キーが必要なことです。
そこでGGHの提案者たちはGGHが完全に崩れたことを認めました。

そして1996年に提案されたNTRU格子暗号はGGHの特殊な形態で、
NTRUも近くで暗号攻撃が進行されて100次元まで平文が見つかりました。
その後に暗号攻撃の性能も、NTRU側の対応も多年間進行されて
格子暗号攻撃に対して安全なパラメータが研究されました。
その結果、NTRUは格子空間の次元が200次元以上で
格子のパターンがあの条件を満足すると現実的な攻撃が不可能だと
入れられました。
そしてNTRUはGGHとは違って、公開キーも一つのベクトルです。
今NISTで進行されているPQC標準化の最終候補7個で5つが格子暗号基盤で
その一つが25年間崩れなかったNTRUです。

[양자암호 시리즈 2 ] 量子コンピューターと九尾のきつね (양자컴퓨터와 구미호)

일본에서 일하면서 회사 테크블로그에 글을 게시하고 있습니다.

부족한 일본어지만, 이전에 제 블로그에 투고한 글들을 정리하고

관련테마로 새롭게 조사한 내용도 있기에 번역기로 살펴보시면 좋을것 같습니다.



今回は前に投稿した素数とRSAに関したテーマに引き続き
量子コンピューターに対して紹介させていただきたいです。

前回の投稿の末に言った通りに現在広く使われているRSA暗号化は
量子コンピューターとショアアルゴリズムのため
もうすぐ使えなくなります。

今回の投稿で量子コンピューターの基本概念をまとめたあと
次の投稿には量子コンピューターとショアアルゴリズムに
立ち向かえる格子暗号化を浅い知識ですがまとめたいです。


     「目次」

  1. 九尾のきつねが望んだデコヒーレンス
  2. IBM Quantum Experience

1. 九尾のきつねが望んだデコヒーレンス

もしかしてこの宇宙がコンピューターではないかと思った時がありますか。
このような考え方はコンピューターの胎動期からもありました。

1941年、世界最初でプログラミングが可能な汎用コンピューターを作った
ドイツのコンラート・ツーゼは宇宙が根本的に万能ディジタルコンピューター
だと主張しました。

ところで宇宙が今日使われているディジタルコンピューターという仮定には
計算性能的な面で限界がありました。

そろばん

計算、calculusはギリシャ語で小石を意味します。
人間にとって最初の計算は多分指と小石などを再配列することでしたよね。
私たちの部族に器は何個か、豚は何匹か。

そうして石などを木の棒などに挟み込むと動きやすく
石を失う心配も消えます。
木のコンピューター、そろばんの誕生でした。
そろばんは0という抽象的な表現もできました。

そうすると小石がそろばんの計算力を付いて行くためには
どれくらいの小石が必要ですか。今日のINTEL CPUと比較すると?
私たちは計算に使われる技術が計算能力の限界を決めることを知られます。


微視世界にある量子は量子ゆらぎのため確率の波動を持っています。
高いところが高い確率を表現します。


WMAP衛星が観測した宇宙からのマイクロ波背景放射


問題はディジタルコンピューターが宇宙全体の時空間、エネルギーを使用しても
宇宙をシミュレーションするには足りない点があります。
量子力学によって私たちの宇宙がディジタルのように
決定論的ではないためです。

今はとんでもなく巨視的なのでほとんど相対性理論の領域であるこの宇宙は
ビッグバンの初期にはそのすべてが量子力学の量子ゆらぎが作用する
点のような小さな微視世界でした。
微視世界で作用する量子ゆらぎのため初期宇宙の密度は均一ではなかったです。
どんな地点は他の地点より密度が高いでした。

そしてビッグバンのあと、重力はこの差を増幅させました。
これはすぐ銀河団のたねになりました。
そして銀河と太陽などの密度を決定しました。
重力が太陽の熱核反応を引き出したあと、放射するエネルギーのため
生命体たちが生まれました。そして今恒星系は
ひかりと重力のネットワークで繋がっていますね。
宇宙はまるで量子ゆらぎをカーネルとしてブーテイングされたOSのようです。

もちろん今も微視世界は私たちの周りのどこでもあります。
ところで量子単位の微視世界を見るためには
本当に立派な顕微鏡があっても無理です。
それはヴェルナー・ハイゼンベルクの不確定性原理があるためです。

不確定性原理によると、私たちは微視世界にある量子の位置と運動量
2つともを正確に知られません。ターゲット量子の位置を分かるためには
量子の一つである光子を射て感知する必要があります。
ところで光子に当たったその小さな量子は運動量が変えます。
巨視世界の野良猫は数多くの光子に浴びても路面で楽に眠っていますが..

そのため量子力学の微視世界で観測は多くの反復観測による
統計的な予測だけが可能です。
まだ位置と運動量が決定されなかったすべての可能性が重畳された状態を
量子コヒーレンス(Coherence)と言います。
この量子重畳は2章で実際の量子コンピューターとして確認します。

サイコロ

ちなみに巨視世界を記述する相対性理論の創始者、
アルベルト・アインシュタインは亡くなる時まで微視世界を統計的な確率で
記述する量子力学のメカニズムに激しく反対しました。
そして「神はサイコロを振らない」という言葉を残しました。
アインシュタインは微視世界を確率で記述する量子力学が
まだ人が宇宙を理解する知識が足りなくため生まれた
不安定な理論として見ました。
でも今まで量子力学は半導体、レーザー、核燃料を含めて
今日の技術に使われています。

その量子力学に基ついた量子コンピューターも確率が基本メカニズムです。
そして決定論的なディジタルコンピューターに比べて
量子コヒーレンスとして比較できない計算力を持っています。

ごばん

碁盤には361個の目があります。
ディジタルコンピューターに根付いた人工知能AlphaGOは
1202個のCPUと176個のGPUを持っていました。
相手が碁石を打ったその瞬間に自分に有利な分岐だけを計算して
必要ない分岐は捨てて計算しないはずですね。

これに反して量子コンピューターは量子重畳によって361個の目が作られる
分岐を最初からすべて持っています。
ディジタルコンピューターは1,024個の実在する蓄電器が必要されますが
量子コンピューターはただ10個の量子があると1,024
(2^10、2になる理由は下記の文段にあります)個の状態を同時に持ています。
量子が必要されるあの一つの状態に決定されることを
量子デコヒーレンス(Decoherence)と言います。

量子コンピューターに使われる情報の単位はQubit(Quantum bit)だと
言われます。ディジタルコンピューターが蓄電器に電子を入れたり引いたりして
0と1を作るように量子コンピューターはレーザーパルスで量子のスピン方向を
左回りまたは右回りさせて0と1を作ります。
情報の単位なので必ず量子のスピン方向を基準として使う必要はありません。

Qubitが覆る速度はディジタルコンピューターが蓄電器を放電することより
1万倍早く1兆倍少ないエネルギーを消耗します。

そして今まで宇宙についた人間の理解によって
宇宙がコンピューターならディジタルではなく
宇宙の微視世界、そのものの確率に負える
量子コンピューターであるはずです。

ここまで見ると量子コンピューターはただ立派な技術だけだと見えますが
具現が難しい難点があります。問題は意図しなかったデコヒーレンスです。

ディジタルコンピューターは私たちが大きく音楽を聞いても
たまさかコンピューターを足で蹴飛ばしてしまっても
相変わらず音楽が聞こえます。CPUとメモリー、
すなわちトランジスターと蓄電器がそのような外部からの刺激は耐えられます。

ところで量子コンピューターは、まだ結果を得る前にも音楽と足が起こした
振動のため量子重畳状態がデコヒーレンスされてしまいます。
量子コンピューターに計算を任せると私たちは中間にその計算を観測すること
または影響を与えることもしてはいけません。
最終に必要な量子だけを意図的にデコヒーレンスさせて
望んだ結果だけを得る必要があります。
そのため量子コンピューターを外部の振動、熱、電磁場から隔離させるために
すごい注意を払わなければなりません。

あの量子コンピューターについた本で著者が量子コンピューター具現の難しさを
九尾の狐物語にたとえたことを見ました。
日本と中国にも九尾の狐の物語がありますが韓国の九尾の狐は
ちょっと悲しい物語もあります。

美しい女人に扮した九尾の狐が人になるため祈っていた。

狐は夫に100日間、夜には自身の部屋を覗かないでほしいと言った。

しかし100日がすぎる前に夫は好奇心に耐えられず

部屋を見てしまいました。

それで九尾の狐は結局人にならなかった。

 



2. IBM Quantum Experience

_IBM Quantum Experience

IBM Quantum ExperienceはIBMが提供する
実際の量子コンピューターが活用できるクラウドサービスです。
5年前は5-qubitの性能でしたが今は16-qubitにアップグレードされていました。
そしてその演算に使われるゲートに関してまとめて置きましたが
今はゲートを含めてインタフェースがかなり変わりました。
ここでは簡単に量子重畳を直接に確認します。
まずはシンプルなNOT演算からテストしてみましょう。


q0にNOTゲートを使ったあと観測


ブロックプログラミングに伴って生成されるPythonのコード


グラフィックインタフェースでブロックプログラミングします。
ブロックで作ると右側にqiskitというパッケージを使用する場合の
Pythonコードも自動生成されます。
上のイメージはq0からq2まで3つのqubitを生成したあと
q0にNOTゲートを適用した場合です。


演算サーバーと反復回数の設定


qubitの基本状態は0ですので、NOT演算すると1ですね。
ところでディジタルコンピューターは0をNOT演算すると
確かに1になりますが、量子コンピューターは
すべての可能な確率が重畳されていますので
0のNOTが0になる確率もあります。そのため反覆観測する必要があります。
その反覆単位はShotsだと言われます。


1024回の反復結果、高い確率で0のNOT演算は1だと判断します。


そして1024回を観測して結果、32回は0のNOTが0になりました。
量子重畳による立派な計算力に反して
このように確率に依存する短所がありますね。
0を1024回にNOT演算して1024回が全部0になる確率も0%ではないです。


一つのQubitを重畳(コヒーレンス)させるアダマールゲート


アダマール(Hadamard, H)ゲートはqubitが0と1を同時に持つ
状態になるように重畳させます。
重畳状態で観測されると半分は0、半分は1になります。
もちろん1024回全部1になる確率も0%ではないです。
量子コンピューターとして真の意味でランダムが具現できます。


申請した作業の待ち


ほぼ半々の確率


2個のqubitなら4つの場合がありますね。ただしこれもほぼですね。



IBM Quantum Experienceは量子コンピューターを使った結果をもらうために
ある程度の時間が掛かります。下記の結果はq0を重畳させてあとq1とswapした観測です。




このような量子コンピューターの量子重畳を通じて
RSA暗号化の解体ができるショアアルゴリズムを含め
既存より早めにデータを検索したり、アルゴリズムのサブルーティンを探したり
するアルゴリズムも発明されています。

ただ量子コンピューターがディジタルコンピューターを代替することではなく
量子コンピューターで意味があるアルゴリズムが発明された時だけ
意味がありました。

IBMの量子コンピューター専門家も
既存のディジタルコンピューターと量子コンピューター、
各々長所と短所があって未来には2種類のコンピューターが
相互補完の関係になると展望しました。

次回は量子コンピューターのショアアルゴリズムに立ち向かえる
ハードウェア・ソフトウェア的な暗号化メカニズムと
ソフトウェアメカニズムである格子暗号化を紹介させていただきたいです。

[양자암호 시리즈 1 ] 素数、宇宙とネットワークに掛かった錠 (소수, 우주와 네트워크에 걸린 자물쇠)


일본에서 일하면서 회사 테크블로그에 글을 게시하고 있습니다.

부족한 일본어지만, 이전에 제 블로그에 투고한 글들을 정리하고

관련테마로 새롭게 조사한 내용도 있기에 번역기로 살펴보시면 좋을것 같습니다.



     「目次」

  1. 科学書との因縁
  2. 素数の足跡
  3. 素数とRSA暗号化
  4. 量子コンピューターとRSAの未来


1.科学書との因縁

こんにちは、ジーマックスメディアソリューションのLimです。

私が初めて運用した個人ブログは自然にTechBlogのようになりました。         
ブログ運営の長所は自分が知っていると思った知識も他の人々に説明する時には
ところどころに穴があって自分が逃していた知識を手に入れて
より固くその知識をまとめられることでした。

ブログを開始した時は大学の頃ですのでほとんどの投稿は専攻である
コンピューターに関したことでしたが共に私の好みだった科学書のことごともありました。

私は高校生3年ずっと図書部でした。実際に思う存分本を読めるサークルは読書部で、
図書部はギリシャ神殿デザインのかなり大きな図書館を毎日掃除したり
昼ご飯の時間にもシフトで学生たちが返却する本を整理したりしました。

その代価はどのサークルよりも溢れる奉仕活動点数でした。私も最初は奉仕点数のため
入部しましたが段々図書館の本に書かれた数字と文字、そしてバンドの色で
学生たちが求める本を早く探してあげることが面白くてやりがいがありました。

そしてあの日、本を整理しながら本当に面白そう本が目に入りました。
「超ひも理論と隠された次元、そして究極の理論に向けた探求旅行」
ブライアン・グリーンさんのエレガント・ユニバスという科学書でした。
今も覚えています。私はただその厚い本が退屈な毎日に逃げ場ように見られました。

ところでその本はその日常よりも退屈なものでした。最初は本の流れはどころか
10ページも読む前に眠りを堪え難かったです。本にはニュートンなどの古典物理学から
最近の宇宙を説明する2つの物理理論が説明されてありました。相対性理論、そして量子力学を
説明したあと著者自分が研究している超ひも理論がその2つの理論を繋げる統一理論だというのが
その本の主な流れでした。まるで紙で作った天然睡眠薬見たいな内容ですね。

ところでブログ運営と図書部サークル活動が思ったこととは違う利点があったように
そのような科学書を読む習慣がくれた考え方は何よりも私のこころの根底に根付きました。

第一に、難しさの基準が変わりました。その前は課題などで困った時に、
「なぜ私がこのような退屈なものに心を掴まれているのだろう。面白いゲームがしたい」
と感じられました。ところでこの世界で(私の思いでは)人間として本当に難しい、
何よりも意味あることごとを今も解決している科学者たちがいることを思って不平より
私にできることを一つ一つやって行く心得になりました。

第二に、知識を吸収する方式を見つけました。最初厚い本を読む時にはほぼ600ページに中で
私が理解した内容は30ページもできませんでした。ところで著者の他の本を読んだり
より絵が多いニュートン見たいな科学雑誌を読んだりしたら私がただ文字列として覚えていた
本たちのそれぞれの断片が自然に繋がりました。難しい内容を早く理解することはできなくても
どんな難しいことも色んな本または反復で理解できることを確信しました。

コンピューターは科学の立派な結果物です。ところで科学書そのものの情報が科学者ではない
私の生に役に立った経験は少ないです。まるで料理人が食べ物のために肥料の成分と歴史を
知らなくても相変わらず美味しい食べ物を作るように。ところでそれはありそうなことです。
ただ私が初心の料理人のためかも..

幸いにここでお伝えたい内容はその中でも科学書と連関性があることです。

2.素数の足跡

皆さん、もしかして素数(Prime Number)にご興味ありますか。
「1とその数以外の自然数では割らない数」です。
3と11見たいな数はすぐに素数だと分かります。
でも31,448,696,501見たいな数はメモ帳があっても早めに素数だと分かりにくいです。
小学生の時に数学教科書でしばらく挨拶したあと時々合われる友達です。
ところでこの子は私を友達だと思えないかも知れません。
なぜならばこの子は私より年齢がはるかに上です。

素数の規則性を求める研究は2,300年前のユークリッドの著書、’原論’でもありました。
ユークリッドは紀元前時代で、素数の無限性を証明しました。以下のように。

AとBが今我々が知っている素数だと仮定しましょう。
そしてAとBを掛け合せると新しい数のCになります。
それじゃ「C+1」はAとB、どの数でも割っても1が残りますね。

これから2つの場合があります。第一はその「C+1 (= A*B+1)」が新しい素数の場合、
第二はAとBもない新しい素数で割られる場合です。どんな場合も新しい素数の誕生です。

その中を知れないものが終わりも知らないですね。
そのドラゴンボールのフリーザーさんもただ3段変身まででしたが素数は無限にそのあとがあります。


ユークリッドが亡くなった10年後に生まれたエラトステネスは「エラトステネスのふるい」という
素数判別方法を見つけました。太陽による影の差異で地球の周りを計算したことでも有名な方です。
エラトステネスのふるいは並んでいる数の中で見つけた素数の倍数は素数がないという簡単な方式で
素数を判別します。素数の定義をそのまま適用した見たいなことです。ところでこれが今日まで
コンピューターなどで素数を検証する一番確確かな方法です。




1792年、ドイツの数学者であるガウスが意味深い発見をしました。ただ概算ですけど
以下のような公式で素数の図体を計れます。これがガウスの素数定理です。
分母は対数関数で素数の頻度が対数関数に反比例してあります。



ガウスは15歳のごろ、手で毎日1000個ずつの素数を探しながらこのような素数定理を発見しました。私がそのごろ一日で10000匹ほど狩ったモンスターたちは全然役に立たなかったですが..


またこのようなこともあります。ニュートン雑誌で見たフリヒタの素数の十字架です。
自然数を24個ずつ以下のように羅列すれば2と3を除いて全ての素数が十字路に現れるます。



かなり不思議ですが、実はこれはただのごまかしでした。それを私も今更分かりました。

雑誌にはそのごまかしまでは説明できませんでした。今あのブログでこのような十字架ができるべきの理由を見つけました。やはりブログ書き物は知識の穴を埋めますね。
素数が現れない部分は偶数、そして余りなどの規則性のためでした。

「この素数の十字架に対して規則性を説明したサイトのリンクです。」
「プリヒタの素数円」は当然の結果です from azui


3.素数とRSA暗号化

ミステリーな素数に比べて人の成果はまだ少ないです。まるで素数は宇宙に掛かった錠の見たいな
ことですね。ところで人は逆にその錠を盗んでインタネット世界を支う暗号化方法として使っています。素数のミステリーを使った暗号化方式はRSAと言われます。

その暗号化方式を発明した3人の名字の頭文字で作名されました。
それじゃRSA暗号化を使って見ましょう。
ここでは私が皆さんのコンピューターにRSA暗号化としてデータを送る状況を仮定します。
私はあなたに「8」を送りたいです。



RSAは暗号化に公開キー、復号化には公開キーと秘密キーを使います。
公開キーは全ての人々が知っています。
ところで秘密キーは自分だけが自分のことを知っています。

公開キーは2つの数です。第一はあなたが持っている2つの素数、3と11と仮定すれば
この2つを掛けた「33」です。そして各素数から1を引いたあと掛けた20,
それより小さな素数を一つ選びます。ここでは第二の公開キーとして「3」を選びます。

秘密キーはこの3に掛けたあと20として分けば余りが1にならなければなりません。
それゆえ秘密キーは「7」ですね(3 * x = 21)。

それであなたの公開キーは(33, 3)として、秘密キーは7として決定されました。
公開キーは私と、私とあなたのメッセージを盗み見たい悪い人を含めて全ての人々が知っています。


暗号化は本当に簡単です。
私があなたに送りたいデータは8でした。私は送りたい「8」をあなたの第二公開キーである
3として自乗します。そして第一の公開キーである33として割ってその余りを求めると
暗号化完了です。17ですね。暗号化は誰も楽にできます。

それじゃ復号化の番ですね。ここで素数の不思議な力が発揮されます。私が送った暗号化データを
あなただけが知っている秘密キーの7として自乗して第一の公開キー33として割って
その余りを求めると原本のデータの8になります。



皆さんもお感じられたようにRSA暗号化は材料であるその素数が大きければ大きいほどいいです。
33見たいな小さな公開キーはただ目で見ても3と11の素因数で分解されます。
それじゃ第二の公開キー3と、3と11としてできる20として秘密キーが7ということが
すぐにばれます。

4391と8819は2つとも素数です。この2つを掛け合せば38724229になります。
ところで38724229を初めて見た人はこれが4391と8819として割られることを
コンピューターなしで知ることはかなり難しいですね。それがRSAの力です。

4.量子コンピューターとRSAの未来

今日のディジタルコンピューターはメモリの蓄電器に電気を詰めたり空けたりして
0と1のデータを処理しますね。ところで今研究中の量子コンピューターというものは
蓄電器のディジタルビットではなくて原子を論理演算に活用します。

これはRSA暗号化に新しい危機になうそうです。既存のディジタルコンピューターは
エラトステネスのふるいのような方式でそのコンピューターの性能向上が
RSAの秘密キーを探すポイントでした。ディジタルコンピューターの性能向上は
普通マルチコアとしての並列性ですね。ところで量子コンピューターの並列性はそれと違います。
ディジタルコンピューターの並列性は別途のCPUコアが作業を「分担」しますが、
量子コンピューターのQubit(Quantum bit)は量子重畳という現象でビットである原子たちが
物理的に繋がってあります。この量子コンピューターの量子重畳がRSA暗号化の危機になります。

量子コンピューターの重要な応用分野になったピーター・ショアのショアアルゴリズムは
量子的な重畳現象でRSA暗号化を解体させることを見せました。以下のようなメカニズムです。

  • 1.公開キー33より小さな数を任意で一つ選びます。私は5を選びました。
  • 2.選択した5を自乗しながら33で割ったあと余りを求めます。


   3.10を周期で繰り返されることを知れます。
     探した周期の折半である5を初めて選んだ5として自乗します。3125です。

   4.3125の上下で±1した数、3124, 3126と33との最大公約数を求めると3124とは
     11, 3126とは3ができます。33の素因数である3と11を求めました。
     これで秘密キー7も求めます。



ここで一番煩わしい部分は5を自乗しながら10という反復周期を探す部分です。
ディジタルコンピューターはこの部分で利点がありませんが、量子コンピューターは
量子間の絡みで重畳された10という周期が観測されるそうです。25か31見たいな特定の数ではなく
周期だけを観測するためフーリエ変換が適用されるそうです。

RSA暗号化のため我々はインタネット世界を安全に使用できます。お金が入っているかばんを持って
外国に直接行かなくても外国の物件がECサイトで決済されます。その他にも会社の重要な情報も
RSA暗号化されてインタネットで流れてあります。そのため今インタネットサービスを提供する
一部の通信社は量子コンピューターに対しても信じられる量子暗号化製品を開発しているようです。


読んでくださってありがとうございます。

2019년 2월 19일 화요일

[국립대구과학관 온라인과학기자단] 2018년 12월 과학기사 _ 국립대구과학관 무한상상실 데님키링 만들기 체험

[국립대구과학관 온라인과학기자단] 2018년 11월 과학기사 _ 국립대구과학관 성인과학교육 '나만의 스마트하우스 만들기' 강의 소감

[국립대구과학관 온라인과학기자단] 2018년 10월 과학기사 _ 국립대구과학관 수학나라의 앨리스 특별기획전 체험

동영상이 포함된 기사여서
네이버 블로그 원본 글 링크로 대체합니다 ^-^.

[국립대구과학관 온라인과학기자단] 2018년 9월 과학기사 _ 국립대구과학관과 인공지능의 교차점

[국립대구과학관 온라인과학기자단] 2018년 8월 과학기사 _ 증강현실과 만난 영상스튜디오

동영상이 포함된 기사여서
네이버 블로그 원본 글 링크로 대체합니다 ^-^.

[국립대구과학관 온라인과학기자단] 2018년 7월 과학기사 _ 테크노폴리스의 과학과 풍경

동영상이 포함된 기사여서
네이버 블로그 원본 글 링크로 대체합니다 ^-^.

[국립대구과학관 온라인과학기자단] 2018년 6월 과학기사 _ 국립대구과학관 천체관측소 체험기

[국립대구과학관 온라인과학기자단] 2018년 5월 과학기사 _ 국립대구과학관 코딩교육 가이드

동영상이 포함된 기사여서
네이버 블로그 원본 글 링크로 대체합니다 ^-^.

2017년 6월 13일 화요일

[일과 자동화] 맛있는 낙지가 우리 식탁에 오르기까지 _자율어업의 가능성


맑고 더운 여름이 다가왔습니다.

지난해 가을, 다니던 직장에서 나와 아르바이트를 전전하던 저에게

집주인 아주머니가 아는 어부 아저씨가 있으니 어선을 타보라고 했습니다.

누가 갑작스레 그런 아르바이트를 쉽게 수락할까요? 제가 그랬습니다..


_어선 위에서 바라본 창원 진해항의 저녁 풍경



대학교 3학년, 해양과학기술 아이디어 공모전을 준비한 적이 있습니다.

'사물 인터넷과 연계한 마리나'라는 테마로, 선박과 IT를 접목해

단순히 마리나가 관광요트의 모항이 아닌 기존 연안어업과

미래형 어업인 외해양식을 위한 기반을 갖추기를 제안했었습니다.

바다의 이용에 관한 대학교 교양강의를 수강하면서 연안에 있는 바다생물을

잡기만 하던 어업을 넘어서서 외해양식을 통해 기르며 연구할 수 있는 어업의 역할은

저에게 매우 의미있게 다가왔습니다.




한국은 매년 국민들의 수산물 소비량은 증가하는데 반해 어업 인구는 감소하면서

부족한 수산물을 외국산 수입으로 대체하고 있습니다.

어업이 1차산업의 한계를 넘어서 4차산업의 물결을 타고 변화한다면

어업 인구의 감소를 막을 수 있겠다 싶었습니다.

한국이 수산물을 적극적으로 기르고 관리하는 어업으로 진입한다면

기원전 1만년 경 농경 혁명이 사회 체제를 완전히 뒤바꾼 것처럼,

연안에 새로운 산업구조가 자리할 수 있으리라 기대했습니다.



_외해양식의 구조



물론 컴퓨터공학 학부생이 바다에 대한 교양강의 하나를 듣고 공모한

제안서는 입상하지 못했습니다. 하지만 그런 구상을 염두에 두었던

저에게 어선에 타보라는 것은 어떻게 되든 필요한 경험의 기회였습니다.

그래서 흔쾌히 수락했고 진해항으로 향하는 버스에 몸을 실었습니다.

그리고 이상과 현실의 벽을 실감했는데요.

저의 구상은..


1. 한국은 새로운 성장동력이 필요하고 사물인터넷 마리나는

IT기술로 해양자원을 활용하면서 어업과 IT기술 모두의 성장을 촉진할 것.

가전제품부터 자동차까지 뻗은 IT산업에 선박도 구성원으로 포함됨으로써

첨단기술을 접목.


2. 단순히 잡기만 하는 어업이 아닌, 기르는 어업을 통해 수입 수산물에 대한

양적, 질적 경쟁력이 높아질 것.


3. 미래어업인 외해양식과 생태계 복원을 위한 바다숲 조성사업을 위해

양식장에 대한 원격 카메라, 원격 구조물 제어, 오염 감지가 가능해야함.

기술적으로 수중에서 안정적인 통신, 동작이 가능한 설비가 필요하기에

새로운 기술적 도전과제.

등이었는데.. 막상 경험해보니 현실은 요구사항을 단 하나로 정리했습니다.


1. 밤새 낙지 잘 잡고, 시세 좋게 잘 팔아서 항구 근처 집에가서 발뻗고 기분좋게 자는 것.


아.. 결국 어부 아저씨가 거기있는 이유는 당장 생계를 위한 것이고. 아저씨에게 필요한

것은 미래가 아닌 당장의 하루하루에 와닿는 무언가였습니다. 그리고 그분에게

현실적으로 중요한 것이 무엇이었는지 정리할 수 있었습니다.



어선에는 아저씨와 저, 단 둘이었습니다. 시즌마다 잡는 수산물이 다른데, 당시에

아저씨는 낙지를 잡기 위한 준비를 하고 있었습니다. 어부 아저씨가 저를 필요로

하는 것은 끼니마다 (어선 위에서) 밥준비와 설거지, 그리고 제일 중요한

낙지의 미끼인 참게를 주낙봉에 끼우는 작업이었습니다.

여담이지만 라면에 넣었먹은 전날밤 잡은 생낙지..

저의 라면사에서 가장 훌륭한 건더기였습니다..



_참게(위)와 주낙봉에 끼워진 모습(아래) [출처 : 국립수산과학원]


아저씨가 주문한 스티로폼 박스에는 살아있는 중국산 참게 수 백마리가 바글바글했습니다.

낮에는 항구에서나 배 위에서 대개 엄지손가락 크기만한 녀석들을

주낙봉에다가 고무줄로 묶는 작업을 합니다. 기계처럼 미끼를 끼우다가

살짝 따끔하면 손을 잘못놀려 바늘에 찔린 것이고

계속 따끔하면 참게가 제 손가락을 집은 것이고.. 그랬습니다.





첫 날 오후에 배 위에서 작업복을 입고 참게를 끼우는 것까진 괜찮았습니다.

그러나 날이 어두워질 즈음, 창원이나 거제 근해로 조업을 나가니

토를 두번 하고서야 제정신이 들었습니다. 아저씨는 배안으로 들어가

누워 있으라고 하셨지만, 신기하게 토를 하고나면 정신이 매우 맑아졌습니다.

정신이 없어 이미지를 남기지 못했지만, 칠흑같은 밤바다 위에서 멀리 연안의 불빛을

바라보는 풍경은, 마치 우주에서 지구의 야경을 바라보면 이런 느낌일까

싶을 정도로 쓸쓸하면서도 오묘한 느낌을 주었습니다.



_국립수산과학원에 올라온 낙지조업 모식도.


이제부터는 아저씨만의 힘겨운 밤샘이 시작됩니다. 저는 아저씨가 출출할 때

커피나 라면을 끓이거나, 선내에서 책을 읽었습니다. 그러다 잠들어서 정확히는 모르지만

아저씨는 낚시줄을 내렸다가 다시 거두어들이기를 반복하며 잡힌 낙지를

뜰채로 거둬 대야에 넣었습니다. 그런 작업을 새벽 내내 반복하다가 잠드셨습니다.

시작점과 끝점에 전기로 반짝이는 부표를 띄워서 방향을 알 수 있고,

배의 측면에서 바퀴가 공장라인처럼 낚시줄을 돌리며 부표 사이를 왕복하는 것이죠.


사물인터넷을 연계한 마리나.. 그런 건 필요없었습니다. 선박끼리의 무전은 원활하게

이루어지며 조업은 질서있게 이루어졌습니다. 힘든 것은 주낙봉에 참게를 끼우는

번거로움, 즉 핵심은 통신이 아니라 자동화에 있었습니다.

아저씨는 밤새 일한 뒤 집에서 주무시고 점심때 다시 배로 돌아와

저와 같이 주낙봉에 낙지를 묶었습니다. 아저씨는 미끼 끼우는 작업만

원활하면 자신도 편하고 미끼가 늘어나니 낙지도 훨씬 많이 잡힐거라 얘기했습니다.

제가 옆에서 봐도 번거로운 미끼 끼우기만 자동화해도 어부 입장에서는 훨씬

생산성이 오르리라 생각되었습니다. 수십년간 쌓인 어부의 경험으로 조업할 터를 잡고,

밤샘 왕복이나 잔손이 많이가는 미끼준비를 자동화한다면 어떨까 싶었습니다.

(하지만 그런 기술의 이점을 누린다면, 당장 소수의 어획량은 늘어나겠지만
수산물의 전체적인 관리 측면에서는 정답이 아닐 것입니다. 의미있는 발전을 위해
필요한 것은 바다숲 조성과 외해양식, 결국 멀리 미래를 보며 준비해온 방안 뿐입니다.)



첫날을 그렇게 보내고, 둘째날은 종일 배 위에 있었습니다. 아저씨는 밤샘작업으로

피곤해서 선내에서 잠들고, 저도 청록의 바다에 감탄하다 잠들었습니다. 점심시간에

기상해 낙지를 넣은 라면이나 아이스박스에 담긴 반찬으로 끼니를 때웠습니다.

그리고 다시 주낙봉에 참게 미끼를 준비합니다. 아저씨는 저보다 참게 수십마리가

들어간 바구니 하나를 채우는 속도가 거의 2배 빨랐습니다. 참게를 빨리 끼우고

담요에 덮어 해수를 뿌리지 않으면 게들이 바닷바람에 말라붙어 미끼로써

낙지의 구미를 당기지 못합니다. 그리고 다시 날이 어둑어둑해지면 밤샘조업을 합니다.


배를 탄지 세번째날 새벽 4시쯤, 먼저 잠에 든 저를 아저씨가 깨웠습니다.

커피나 라면이 드시고 싶은건가 생각했는데 아니었습니다. 두번째 조업을

막 끝낸 아저씨는 이틀밤 모은 낙지 250여 마리를 진해항 어시장에 팔아야하니

옮기는걸 도와달라 하셨습니다. 아직 잠이 덜깨서 멀뚱멀뚱했지만

TV 프로그램 체험 삶의 현장에서만 보던 새벽어시장을 두눈으로 직관하는 것이

흥미진진했습니다. 정신이 멍한 저와 달리 어부 아저씨들과 식당 아주머니들은

저한테도 랩처럼 들리는 중개인의 말에 집중하며 노련하게 사인을 주고 받았습니다.

250여 마리, 많이 잡은 편이었지만 크기가 작아 마리당 4,600원에 팔렸습니다.

아저씨보다 적게 잡은 다른 어부 아저씨는 낙지 크기가 커서 조금 더 높게

받는 걸 보았습니다. 아저씨는 낙지 시세가 좋을 때면 마리당 7,000원까지 올라가는데

그럴 때가 되면 너도나도 낙지만 잡는다고 말씀하셨습니다. 저에겐 4,600원만해도

시간대비 대단한 수익이었는데, 문제는 매번 그렇게 잡을 수 없다는 점이었습니다.

밤 12시까지 조업했는데 10마리도 안잡혀 일찍 잠드는 날도 있었습니다.



- 2박 3일의 첫조업을 끝내고 어시장에서 찍은 진해항의 아침 일출


경매가 끝나고 아저씨의 지인인 식당 아주머니를 따라 근처 식당에서 배부르게

해산물 요리를 먹었습니다. 사실 저는 이 게시글의 서두에도 얘기드린 것처럼

어업을 경험해보고자 찾아왔지만, 아저씨는 지인들에게 저를 공부하는 친구지만

힘들어서 본격적으로 어업을 배우러온 동생으로 소개했는데요.. (틀린 말은 아닌거 같기도..)

어떤 아주머니는 자기 딸은 공무원도 안쳐다본다며.. 배타는 사람은 안 된다는 뜬금없는?

얘기들도 나왔습니다 ~_~

아저씨, 아주머니들의 안주거리가 되었지만 밥이 맛있으니 괜찮았습니다.

아, 지금 이 글에서는 아저씨라 호칭하지만 일할 때는 반드시 형님이라 해야했습니다.

모르고 아저씨라고 하면 표정이 진지하게 안 좋아지셨는데요 ^-^..

혹시 아저씨가 이 글을 보신다면.. 마지막으로 지금 여기서 아저씨라 칭해서 죄송합니다.

근데 요즘은 아저씨라는 호칭도 젊게 느껴지지 않습니까? ㅎㅎ

아침을 먹은 후 아저씨와 헤어져 마산으로 돌아와 그날 하루는 달콤한 휴식을 취했습니다.


식당에는 늦은 나이에 뱃일을 배우는 아저씨도 계셨습니다.

조선소가 어려워지고 갑자기 어업을 배우려는 사람이 늘어

배를 내놓으면 금방 팔린다는 쓸쓸한 이야기들도 들렸습니다.

우리나라가 미래먹거리를 낚을 좋은 그물을 준비해내어

언젠가는 풍어기로 진입했으면 좋겠습니다.

2017년 2월 2일 목요일

[C/C++] 소수, 우주와 네트워크에 채워진 자물쇠 (RSA 공개키 암호화 구현)





Download link :

RSA_console _170202




소수 (prime number) :

1과 그 수 이외의 자연수로는 나눌 수 없는 자연수.




소수의 규칙성을 찾기 위한 연구는 2,300년 전 유클리드의 저서 '원론'에도 적혀 있습니다.

소수가 오래전부터 드러났다는 것보다, 기원전 시대에서 소수의 무한함을

증명한 유클리드의 통찰이 더욱 놀랍네요.

그럼에도 오늘날까지 소수를 판별하는 완전한 규칙성은 나타나지 않았는데요.

여기 그동안의 역사에서 소수의 규칙성을 밝히기 위한 노력 중 몇가지가 있습니다.




1. 에라토스테네스의 체




유클리드 사후 약 10여년 뒤에 태어난 에라토스테네스는 수학자이자 천문학자입니다.

그는 이집트 두 도시의 태양 그림자 차이로 지구의 둘레를 어림 계산한 것으로 유명한데요.





에라토스테네스의 체는 나열된 수에서, 소수의 배수는 소수가 아니라는

규칙으로 합성수를 제거하는 방법입니다. 2를 만난 순간 모든 나머지 짝수가 제외되고

3이라는 소수로 그 배수인 9와 15 등을 소수 리스트에서 제거할 수 있죠.


그렇지만 '확실'할 수 밖에 없는 노가다를 하기에 확실한 방법입니다.

소수의 정의를 그대로 연산에 적용한 것이나 다름 없습니다.

이렇게 해서는 여전히 수십 - 수백자리의 큰 수가 소수인지 아닌지 판별하기 위해

높은 성능의 컴퓨터와 긴 시간에 의존할 수 밖에 없습니다.

그런데도 오늘날까지도 소수를 발견하는 가장 확실한 방법이 에라토스테네스의 체입니다.




2. 가우스의 소수 정리


밤낮없이 게임속 수만의 몬스터를 잡고 있던게 저의 15살인데,

독일의 수학자 가우스는 15세 때 수를 1,000 단위로 나누어 그 안에 있는 소수의 개수를

세었다고 합니다. 수십만이나 되는 수를 조사한 가우스는 일정 구간에 존재하는

소수의 개수를 어림할 수 있는 정리를 발견했습니다.




소수 정리는 특정한 수가 소수인지 직접적으로 판단하는 용도는 아닙니다.

하지만 정체모를 소수의 덩치라도 가늠할 수 있게 되었습니다.

현재는 가우스의 방법보다 좀 더 정확한 방법도 발견되었다고 합니다.




3. 플리히타의 소수 십자가




숫자를 24개 단위로 시계 방향으로 나열하면 십자 모양으로만 소수가 나타남을

알 수 있습니다. 각 선 위에 나타나는 소수는 불규칙하지만 2와 3을 제외하면

소수가 나타나지 않는 선 영역을 구분할 수 있습니다. 소수의 십자가는 소수 규칙성 발견의

가능성 뿐만 아니라 과학의 가능성까지 넓히고 있습니다. 원소 주기율표의 원자,

아미노 산, DNA 나선 구조를 비롯한 물리, 생화학, 핵화학에 필요한 원천 구조에까지

중요성을 가진다고 합니다.


플리히타는 소수의 십자가가 인간의 발명이 아닌,

무한함을 원자 구조 내에서 유한하게 만들기 위한 건설계획일거라 말했습니다.




4. 소인수 분해와 RSA 암호화


하지만 오늘날 정보화시대에서 소수는 신비로움만으로 남지 않았습니다.

어떤 수를 소수의 곱셈으로 나타내는 것을 소인수 분해라고합니다.

420의 경우에는 '420 = 2 x 2 x 3 x 5 x 7'로 소인수 분해됩니다.

특이점은 두 큰 소수끼리의 곱셈에서, 소수의 곱셈은 종이와 펜만 있어도 할 수 있지만

반대로 곱한 수를 만드는데 쓰인 두 소수를 알아내기는 무척 어렵다는 점에 있습니다.





4,391과 8,819는 소수입니다. 이 둘을 곱하면 38,724,229라는 건 초등학생도

알 수 있죠. 하지만 38,724,229를 처음 본 사람은 이 수가 4,391과 8,819라는

소인수로 구성된다는 걸 알아내기 어렵습니다. 불가능한건 아니지만,

에라토스테네스의 체처럼 그 규칙성 없는 소수를 알기 위해 루프를 돌려야겠죠.

현대 네트워크를 지탱하는 RSA 암호체계는 이 소인수 분해의 난해함을 도구로 활용합니다.

38,724,229와 같은 큰 소수의 곱셈결과를 암호체계의 열쇠로 활용합니다.

원소가 되는 두 소수인 4,391, 8,819를 아는 사람만 공유할 있는 열쇠가 생긴 것이죠.

크롬 브라우저의 설정 탭에서 인증서 관리 항목을 보면 특정 사이트에 대해

사용자 자신을 보증하는 인증서에서도 RSA 암호가 활용된다는 걸 알 수 있습니다.





그럼 여기서 소수를 활용하는 RSA 암호화, 즉 공개키 방식이 꼭 필요한가라는 의문이

들 수 있습니다. 공개키 암호의 내구성을 알기 위해 우선 대칭키 암호의 특성부터

살펴봅시다.

_대칭키 스트림 암호방식의 RC4 구현 게시물 link






대칭키 암호는 암호화와 복호화에 같은 키를 사용합니다. 내가 숨기고 싶은 데이터를

암호화하는 키, 암호화된 데이터를 복호화하는 키가 똑같기에 대칭키라고 합니다.

XOR 연산이 대표적인데요, 추가적인 정보는 위의 RC4 게시물 링크로 확인하는게

좋겠습니다.




_RSA 발명 당시의 Adi Shamir,  Ronald L. Rivest,  Leonard Adelman. (왼쪽부터)


RSA는 암호화에는 공개키, 복호화에는 개인키를 사용하기에 비대칭 암호화입니다.

대칭키로 암호화한 데이터의 평문과 암호문이 유출되면 어떻게 될까요?

암호화된 평문을 훔친 크래커가 암호문을 알게 되면 평문도 바로 해석할 수 있습니다.


공개키는 '나에게 데이터를 전달하고 싶다면 이 키로 암호화하라'라고 공개한 것입니다.

공개키는 정상적 정보교환자인 알라딘 서점이나 옥션은 물론, 나의 거래 데이터를

훔쳐보고 싶은 크래커 또한 알게 됩니다. 하지만 정작 데이터를 복호화해서

이해할 수 있는 개인키는 나만이 알고 있습니다. 그렇기에 크래커가 데이터 신호를

훔쳐서 획득한 암호화된 평문을 누구나 아는 공개키로 풀어서는 평문이 나오지 않습니다.

모두가 아는 열쇠로 나만이 풀 수 있는 자물쇠를 얻어낸 것입니다.

암호열쇠와 복호열쇠가 다른 '일방향성'의 암호화, 여기에 소인수 분해의 기여가 있습니다.





RSA 암호화는 C++ 소스코드와 함께 보려합니다. 사실 저도 기억이 가물가물해서..

준비물로 매우 큰 정수를 다루는 도구가 필요합니다. RSA 암호화에는 데이터를

제곱하는 구간이 있는데, 기본 C++ 데이터 타입의 크기 한계를 쉽게 넘어버립니다.

이전 제가 선택했던 방법은 큰 정수를 다루는 라이브러리를 포함시킨 방법이었습니다.

_Big Integer Library website link


개발자 분이 프로젝트 지원은 끝내셨지만 아직 사이트는 살아있네요.

다운로드 받은 2010년 4월 30일자 버전 압축파일을 풀고 Qt 프로젝트로 인클루드합시다.

저는 그냥 프로젝트 항목을 우클릭해서 'Add Existing Directory...'로 통째로 넣었습니다.

거기에 INCLUDEPATH만 타이핑으로 추가입력했습니다.







'BigInteger' 라이브러리를 인클루드하고 전역변수를 설정합니다. 여기서는 제가 여러분의

컴퓨터에 RSA 암호화한 데이터를 보내는 상황을 가정했습니다. 그렇기에 여러분 컴퓨터의

공개키로 암호화한 데이터를 여러분만이 아는 비밀키로 복호화해야합니다.

공개키는 2개의 수인데, 소수 2개를 곱한 '33'과 20 아래에 존재하는 소수 'e'입니다.

이 제한선인 20은 두 소수에서 1씩을 뺀 뒤 곱한 값입니다.

여기서는 e를 3으로 선택했습니다. 비밀키는 e에 비밀키를 곱하고 20으로 나누었을 때

나머지가 1이 되어야합니다. 따라서 비밀키는 7로 되었습니다.

공개키 (33, 3)은 여러분에게 중요한 메시지를 보내고 싶은 사람이나, 혹은 그걸

훔쳐보고 싶은 사람이나 모두 알 수 있습니다.





하지만 크래커인 트루디가 중간 데이터를 캐치해도 안심입니다. 비밀키는 오직

당신만이 알고 있습니다. 제가 여러분에게 보낼 데이터를 공개키로 암호화하면서

'이렇게 처리해서 보내면 ~씨가 비밀키로 알아서 잘 복호화하겠지.' 하고 안도할 수 있는

이유가 거기에 있습니다.





원본 데이터를 암호화하는 함수입니다. 제곱하면서 커지는 큰 정수를 감당하기 위해

'BigInteger' 타입으로 데이터를 잠시 복사합니다. 원본 데이터를 당신이 공개한 공개키

'e'회만큼 제곱하고, 트루디도 아는 공개키 N (33)으로 나눴을 때 나머지가 암호화된

데이터입니다. 암호화는 누구나 할 수 있는 것이죠.





암호화된 데이터를 복호화하는 함수입니다. 여기서 드디어 소수의 신비로운 마법이

가미됩니다. 암호화 데이터를 당신만이 아는 비밀키의 횟수만큼 제곱하고 공개키

N으로 나눈 나머지가 제가 당신에게 전달하고자 했던 원본 데이터입니다.





제가 보내고자 했던 데이터는 '8', 보내기 위해 암호화한 데이터는 '17',

17을 받아 당신의 비밀키로 복호화한 데이터가 '8'입니다.

제가 단순히 8에다가 10을 곱해서 80으로 만든 뒤, 우리들의 비밀 키워드가 '10'이라고

제안했다면 트루디가 데이터 신호를 훔쳐서 원본에 10이 곱해지고 있다는 걸

알아내기 쉽습니다. 텍스트에서 가장 흔하게 나오는 영어문자가 'e'이기에

가장 흔하게 나오는 데이터를 캐치한 뒤, e의 아스키코드 십진수 값에 해당하는

101에서 10이 곱해지거나 XOR 된 것을 확인할 수 있겠죠. 트루디가 혹시나

10이 키워드인가 싶어 다른 데이터를 모두 10으로 복호화했더니 드러나는 데이터가

'3(dk3fcn6lsh' 같은 게 아니라 'Trudy is an intruder'와 같다면..

그 비밀은 이제 트루디의 재산이 됩니다. 좋은 얼굴로 봐주지는 않겠죠.


이 과정을 통해 반대로 저의 공개키로 여러분이 암호화한 데이터를 제가 비밀키로

복호화하는 상황도 쉽게 그려지실 겁니다.




5. 양자컴퓨터의 소인수분해, RSA의 미래


소수가 크면 클수록 좋은 것은, RSA의 의미가 거기 있기 때문입니다. 견고한 소인수분해

기반의 RSA라도 33과 같은 작은 공개키는 눈으로 봐도 3과 11로 소인수 분해 되버립니다.

그러면 두번째 공개키인 3과 두 소수, 3과 11로 알게 된 20이 비밀키가 7이라는 것을

밝혀버리죠..


그런데 축전기 디지털 비트 단위가 아닌 원자 단위를 논리 연산에 활용하는 양자컴퓨터는

중첩이라는 특성에 의해 RSA에 조금 다른 위기가 될 수 있습니다. 기존 디지털 컴퓨터의

성능향상, 즉 속도에 의해 에라토스테네스의 체와 같은 방법으로 소인수 분해될 위험과

마주했다면 양자컴퓨터는 물리학에서의 진보로 인해 찾아오는 논리적 위기입니다.

양자컴퓨터에 대한 게시물은 '프로그래밍 유니버스'라는 책에 대한 저의 리뷰를

우선 참고해주시면 좋겠습니다.

_'프로그래밍 유니버스' 리뷰 link


디지털 컴퓨터의 병렬성은 별도의 코어가 작업을 '분담'하도록 하지만, 양자컴퓨터의

양자역학적 중첩은 그것과 다릅니다. 양자컴퓨터의 중요한 응용분야가 된 피터 쇼어

쇼어 알고리즘은 양자적 중첩과 붕괴현상으로 RSA 암호화를 해체할 수 있음을 보였습니다.

관련 도서에서 읽은 메커니즘은 다음과 같습니다.


쇼어의 소인수 분해 알고리즘은 시계판 연산을 사용합니다.

33이라는 수를 굳이 시계판 연산으로 소인수 분해해볼까요?

[1] 33보다 작은 아무 수를 하나 선택한다. 여기서는 5.

[2] 선택한 수 5를 제곱해가며 33으로 나눈 나머지를 구한다.

5 -> 25 -> 26 -> 31 -> 23 -> 16 -> 14 -> 4 -> 20 -> 1 ->
5 -> 25 -> 26

[3] 10을 주기로 반복되는 걸 알 수 있다. 알아낸 주기의 절반인 5로
    처음 고른 수, 5를 거듭제곱한다. (5^5 = 3,125)

[4] 3,125의 위아래로 ±1한 값, 3,124와 3,126과 33과의 최대 공약수를 구하면
    3,124와는 11, 3,126과는 3이 나온다. 33의 소인수는 3과 11이다.


여기서 가장 번거로운 부분은 5를 거듭해 제곱해가며 10이라는 반복주기를 알아내는

부분입니다. 디지털 컴퓨터는 저 연산에서 이점을 얻지 못하지만,

양자컴퓨터는 큐비트, 즉 양자 간의 얽힘으로 중첩된 10이라는 주기를 관측할 수

있다고 합니다. 25, 31과 같은 특정 수로 붕괴되지 않고 주기만을 관측하기 위해

푸리에 변환이 적용된다고 하네요. 제가 읽은 책에서는 여기까지 소개되어 있었습니다.

이 부분은 눈으로 봐야 알거 같은데. 언제 보게 될 날이 올까요..







_참고도서