Imaginantia

思ったことを書きます

「暗号という恐怖」のお話

phi16.hatenablog.com

1年とちょっとが経ちましたので、諸々の整理と共に「終わらせる」話を記します。

もしもまだ遊ぶ方が居ればこちらからどうぞ。

では。

 

 

 

 

 

作り始める頃の話を書こうかと思ったんですがあまり覚えてないので書けませんでした。「1%の仮想」展あの要素を見て""そういう""のを作ってみたいと思っていたのが最初だったような気がしています。

案はすぐ出てきました。所謂RSA暗号という暗号通信方式が世の中には存在していて、特に実用されているわけですが、その根本的な枠組みは非常に単純です。正しく値を取り出すには冪剰余を高速に計算するなど「作業」が存在するわけですが、可視化の側面としてはその骨組みだけを提示することが出来たらいいのではないかと思いました。

重要なのは素因数分解の困難性で、例えば数字を提示するだけでもそれは「問題」に成り得ます。難しい問題を作るのは特に難しくなく、言ってしまえば実世界で使われている暗号鍵を作らせれば難しい問題が出来ます。

$ openssl genrsa | openssl rsa -pubout | openssl rsa -text -pubin
Public-Key: (2048 bit)
Modulus:
    00:a5:63:c8:1b:a3:c6:1c:1a:21:f3:ff:5e:fa:bd:
    76:45:81:55:be:4e:72:b5:5a:aa:f8:0d:83:a7:5e:
    18:d8:1d:bf:d8:81:7e:bf:f9:fe:34:7c:13:e7:30:
    4e:48:77:9d:e1:22:b5:8b:1f:bb:a7:4e:11:f2:eb:
    bd:8e:45:58:b2:3f:fa:0d:e0:12:f8:b1:9f:17:05:
    4a:4f:72:ba:10:6c:c6:fc:4d:91:f5:c6:42:38:46:
    bc:46:eb:11:b3:0b:4e:d2:6e:46:dd:7b:bb:89:58:
    31:8e:0e:bc:31:5f:eb:47:37:e7:cf:b0:d8:63:35:
    42:87:0a:62:48:6d:dc:d8:fe:14:97:3d:1c:52:4b:
    f6:44:ee:4f:35:0e:bd:c9:bb:64:4b:15:de:42:49:
    04:9c:7d:af:a4:3a:58:30:0a:34:e1:69:ba:d8:7f:
    41:bf:51:52:a8:70:dd:ba:49:a2:b3:fb:c6:4c:9c:
    b6:a2:4f:cd:43:40:3c:94:cc:24:70:54:1c:29:cb:
    c7:1b:c0:51:7c:c9:82:fa:89:50:e8:7d:83:d4:73:
    4e:bd:bf:37:6d:83:17:f3:49:f5:ec:f6:71:b6:d7:
    68:1c:65:5b:4a:f1:fa:7c:92:93:3e:b9:f9:80:79:
    af:9a:51:df:94:e8:08:c2:0e:48:ae:35:49:5a:da:
    ee:cd
Exponent: 65537 (0x10001)

が、当然これは難しすぎるので、手である程度の制御をしなければなりません。また、回転による数字の指定では精度が問題となっていたのである程度の制約が必要であることもわかっていました。逆にこの制約を利用して位置と回転のどちらに割り当てるのかを自動的に決定することができたという点もありましたが。根本的にどれくらいの困難さにするかは悩んでいたんですが、わかると解けるみたいなものが望ましいことはわかっていました。

私が考えたのは n=(x-y)(x+y) 型の合成数です。この型に当てはまることがわかれば x\approx\sqrt{n}y\ll x を仮定して探索すればいけるんじゃないかと思ったんですよね。実際これは行けるんですが。

 

問題だったのは「直る前はめちゃくちゃに壊れていた」こと、そして「この解法を知る由もない」ことと「そうでなくとも解けた」ことです。

まず壊れていた件は明らかに私がこの発想に固執しすぎていたせいでちゃんとした検証が出来なかったことにあります。「何らかの解く道筋が存在していなければならない」という思想の下、一番実現しやすいのはこれなのではと思っていたのが原因です。そしてその道筋の明示的存在を示さなかったことから、この方針で処理をすることができなかったという点があります。何かオブジェを置こうかとかも思ったんですが意味解釈ができるのは自分だけだよな、みたいな気持ちになっていました。根本的にこの解法を採用することが間違っていたのです。

あとは普通に世の中のライブラリが強かったですね。自分の触りやすい範囲でちょっとは動かした記憶があるんですが (恐らく実生成段階じゃなくて、その前の検証段階) だいぶ偏っていたようで。結果としては一切意図通りには動かず、もっと重い気持ちで検証する必要性を認知したところでありました。

 

 

そのような中身とはまた別の話として、外見の点にもいくつかの反省点があります。「裏の3桁」「文字の違い」「カメラフィルターの利用」です。

何か決まった道筋を沿わせようとしたとき、それに関連の薄い物は基本的に置くべきではないわけですね。いや、関連はあり、それを意図的に含めた部分はあったわけですが、その混乱を解消する手段は持っているべきだったのかもしれないわけです。つまり「複数の願いが衝突していた」ことが根本の原因です。

そして関連が強いものは連関が強く見える形で存在するべきなのだと思います。前面の彫られた数字と背面の浮かび上がる数字、中身レベルでは同じ物体なわけですが外見ではフォント・テキストの中身・シェーダ・位置・出現方法が違うなど、とても善くない状況であったわけです。

また出現させるためにカメラフィルターを用いる案は「1%の仮想」展にあった展示から来たものですが、私のものは「そこに何かがあるのではないか」という疑念をいつ持たせるか、ということを考えていなかった部分がありました。「そこにある情報では明らかに最後までたどり着けないことがわかるだろう」というのは完全に慢心で、これを行わせるには「何も示さないこと」が必要なのでしょう。その点は某の某部屋は的確だったのではないでしょうか…許されているかについての認知が人によって違う感じはありましたが。

 

というわけで散々だった作品の話でした。散々だったものを散々だったで終わらせてはいけないと思うのですが、この作品はもう出来てしまったもの、です。

この反省から、「善い」ものができると良いなと、思っています。