そしてみんなReactになった
小学生の頃、親に「みんな○○」みたいな事を言うと、みんなじゃないでしょ!って言われたけど、未だに言ってしまうので多分一生治らない
令和になり、みんなReactをやってる(多分平成から、知らんけど)
iOSアプリもネイテイブじゃなくてReactNativeで作ってるみたいな話をよく聞く
なんかReactNative万歳みたいな世の中で、Nativeのほうが好きな私は生きづらい でも批判するにも知識が必要なので、まずはReactを触ってみることにした
話は飛んで、ベネディクト・カンバーバッチについて
ベネディクト・カンバーバッチ、最近良く映画とかで見ますよね
皆さんはベネディクト・カンバーバッチといえばなんのイメージですか?
ピーター?(裏切りのサーカス)カーン?(スタートレック)ドクター・ストレンジ?(ドクター・ストレンジ)アラン・チューリング?(イミテーションゲーム)
私は断然シャーロック(シャーロックっていうドラマ)です
先日久しぶりにイミテーションゲームを観ました
「イミテーション・ゲーム/エニグマと天才数学者の秘密」という映画は、数学者アラン・チューリングが第二次世界大戦中にエニグマ暗号の解読を頑張る、という内容です。
エニグマ暗号とは、ナチス・ドイツが用いていた暗号のことで、主人公のアラン・チューリングはコンピューターの誕生に重要な役割を果たした人です
劇中では登場人物の皆が暗号解読に苦労していて、実際にどんな暗号だったのか気になったので、調べて実装してみることにしました
あと、今回始めてたいぷすくりぷとなるものを使ってみた
エニグマの仕組み
むつかしー
ローターと反転ローターについて
ローター
ローターとは、入力された文字を他の文字に変換する機構
エニグマのローターは、文字入力の度に回転する
つまり、AAA
とい文字を入力してもEKM
のように、毎回変換される文字が変わる
例えば、初期位置が
In | ABCDEFGHIJKLMNOPQRSTUVWXYZ Out | EKMFLGDQVZNTOWYHXUSPAIBRCJ
という対応になっているローターがあるとする Inは入力される文字で、Outは出力される文字
ローター内部の配線によって、A
とE
が対応し、E
はL
と対応している
次に、ローターを1文字ぶん回転させると、入力に対する出力が変化する
In | ABCDEFGHIJKLMNOPQRSTUVWXYZ Out | KMFLGDQVZNTOWYHXUSPAIBRCJE
Outが1つずれて、今度はA
とK
が対応し、E
はG
と対応するようになる
可動式のローター1枚の場合、In/Outの対応が既知であれば暗号化の方法は 通り ローターのIn/Outの対応が未知であれば、対応の組み合わせは となる
ローターが3枚の場合、In/Outの対応が既知であれば 通りになる また、3枚のローターの順番を入れ替えれば、 通りになり、5枚のローターを用意しておいて、そのうちの3枚を用いるようにすれば、 通りとなる
反転ローター
反転ローターも入力された文字を他の文字に変換する機構 ただし、ローターとは異なり、入力と出力が1:1対応する
例えば、A
に対してF
を出力する反転ローターは、F
に対してA
を出力する
エニグマはこの反転ローターによって、平文と暗号文が1:1対応するという特徴がある つまり、ローターの初期位置をマシンにセットして、平文を打ち込めば暗号文が、暗号文を打ち込めば平文が出てくる また、入力文字と出力文字は絶対に同じにはならないので、平文と暗号文の組み合わせがあれば、解読のヒントになるらしい
反転ローターの設定方法は、A-Zの文字を13組に分けるので、全部で
通りになる
反転ローターの構成が既知の場合、出力される文字は入力文字以外の通りとなる
モノ
上部のEncoderは暗号機で、下部ではローター間でどのように電流が流れているかを可視化している
暗号化はR1→R2→R3→Reflector→R3→R2→R1
の順で行われる
ローターの設定は、Enigma I
というモデルの、I
, II
, III
をそれぞれR1
, R2
, R3
に設定している。
また、反転ローターにはReflector A
というものを用いた。
see also: Enigma rotor details - Wikipedia
ローター位置がそれぞれ、B
, C
, D
、つまりそれぞれ1つ、2つ、3つズレているときに、A
を入力すると
となる。
まず、A
と入力すると、R1
のB
の位置(1つズレているので)に電流が入り、K
から電流が出る。これは、J
の位置(1つズレているので!)に対応している。
次に、R2
のJ
の位置にある、L
(2つズレているので)に電流が入り、H
から電流が出て……
という感じで反転ローターまで達し、O
からQ
へと電流が流れ、最終的にZ
が光る
つまり、この構成では、A
とZ
が対応している
実装
Reactに関してはあまり自信がない……
Reactは関係無く、Enigmaの暗号機
Enigma/Enigma.ts at master · hayashikun/Enigma · GitHub
諸々のコンポーネントたち
Enigma/src/component at master · hayashikun/Enigma · GitHub
感想
割とReactは楽しかった
もっと触ってみたい
あと、英語版Wikiにはエニグマ関連の記事がいろいろ揃ってて面白そうなのでもう少し読んでみよう