SlideShare a Scribd company logo
1 of 57
Download to read offline
エニグマ暗号とは何だったのか	
堀川 隆弘	
  
@thorikawa
今日話すこと	
•  エニグマの構造と動作原理	
  
•  ポーランドによるエニグマ解読	
  
– ローター配線の解明	
  
– ポーランドによる(初期の)エニグマ解読	
  
•  イギリスによるエニグマ解読	
  
– チューリング・ボンベの仕組み	
  
– チューリング・ボンベの高速化(フィードバック
ループとウェルチマンの対角ボード)	
  
エニグマの構造と原理
そもそもエニグマとは	
•  第二次世界大戦でドイツが用いた換字式暗
号機	
  
•  1文字ごとにローターが回転し、換字表が切り
替わる多表換字式	
  
•  電動式という点が当時は画期的だった	
  
エニグマの構造	
•  プラグボード・ローター・リフレクタの各パーツが換字
表になっており、組み合わせによって暗号化される	
  
•  ローターは駆動式になっており一文字タイプするごと
にローターの換字表が変わる	
  
•  タイプするごとに暗号化された文字が点灯する	
Source:	
  h1p://www.electricinca.com/56/annota:ons/enigma_details.htm	
プラグ
ボード	
ローター	
リフレ	
  
クタ
エニグマの構造・ローター	
•  複数のローターから3枚(*)を
選んでエニグマ機にセットする	
  
•  オペレーターはローターを回転
させて、エニグマ機の窓から見
える文字(ローター位置)を調
整する	
  
•  一文字タイプするごとに一番右
のローターが1/26回転する	
  
•  各ローターはある特定の位置
で繰り上がり(「ターンオー
バー」と呼ぶ)があり、左側の
ローターを回転させる	
 ※大戦後半の設定ローターは4枚の	
  
  場合もあり
エニグマの構造・リフレクタ	
•  ローターと似ているが固定
である(回転しない)	
  
•  13個のペアを入れ替える換
字表であり、対称的である	
  
•  これによりエニグマ全体とし
ても対称的、かつ、ある文
字を自分自身に暗号化しな
いという特徴がある
エニグマの構造・プラグボード	
•  5〜10個の文字のペアを作っ
てプラグでつなぐ	
  
•  プラグの両端に対応する文
字を入れ替える役割をする	
  
•  組み合わせ数が膨大	
  
–  10ペアだと
150,738,274,937,250通り	
  
エニグマの設定	
以下の設定が「日鍵」として共通鍵として使われる	
  
•  ローター配列	
  
–  どのローターを使いどういう順番でセットするか	
  
•  ローター位置	
  
–  窓から見えるローターの文字を、ローターを回転して調整する	
  
•  リング設定	
  
–  ローターの実配線と、ローター周囲の文字との位置関係を調整する
ための設定	
  
–  実質的にはローター位置を変更することとほとんど違いがないため、
無視されることが多い	
  
•  プラグボード	
  
–  どの文字をプラグでつないで入れ替えるか	
  
	
  
Source:	
  h1p://
www.codesandciphers.org.uk/
virtualbp/navenigma/
navenig1.htm
ポーランドによる	
  
エニグマ解読
当時の状況	
•  1932年当時、ポーランドの数学者レイェフス
キの手元にあった情報	
  
– 商用版エニグマ機	
  
– オペレーション・マニュアル	
  
– 傍受されたエニグマ暗号文	
  
各ローター(リフレクターを含む)の配線はこの時点
では分かっていない(商用版と軍事版とで異なる)	
  
•  レイェフスキはこれらの限られた情報から軍
事用エニグマの複製を作ることを考えた	
  
当時のドイツ軍の暗号送信手順	
1.  指定された日鍵(ローター配列・位置・リング設定・
プラグボード)通りにエニグマ機を設定	
  
2.  送信者が選んだ任意の3文字(メッセージ鍵)を2
度タイプする	
  
–  メッセージ鍵はその後本文を暗号化する際に使われる	
  
–  仮にメッセージ鍵をXYZ暗号化された後の6文字をPYQ	
  
KAOとする	
  
3.  ローター位置をメッセージ鍵と同じになるように	
  
回転させる	
  
4.  メッセージの平文をタイプして暗号文を得る	
  
5.  2で得られた暗号化されたメッセージ鍵6文字(PYQ	
  
KAO)に続けて、4の暗号文を無線で送信する	
  
弱点:メッセージ鍵のくり返し	
•  レイェフスキはこのメッセージ鍵のくり返しに着
目した	
  
•  ある1日の中で、1文字目と4文字目(2文字目と
5文字目、3文字目と6文字目)の対応関係は決
まっている	
  
– 例)1文字目がAなら4文字目は必ずTになる	
  
•  十分な数のメッセージを調べることで、これら
の対応関係を全て洗い出すことができる	
ABCDEFGHIJKLMNOPQRSTUVWXYZ
TMWORPGSKQFLYEJCAHUDNZIBVX
例)1文字目と4文字目の	
  
対応
サイクル構造	
この各文字の対応関係をチェーン・サイクルで表し
ていくと、いくつかのサイクルに分解されることが分
かる	
  
	
  
	
  
サイクル構造:	
  
(A,T,D,O,J,Q)(B,M,Y,V,Z,X)(C,W,I,K,F,P)(E,R,H,S,U,N)
(G)(L)	
  
	
  
このサイクルはエニグマを解読する上で重要な性
質を持つ	
  
ABCDEFGHIJKLMNOPQRSTUVWXYZ
TMWORPGSKQFLYEJCAHUDNZIBVX
繰り返し文字の対応関係と置換	
•  ある日のエニグマ機設定における、1文字目
の平文⇒暗号の置換をA、同様に2文字目以
降B,C,D,E,Fとする	
  
•  暗号文の1文字目と4文字目の対応関係は、	
  
    の置換で表せる	
  
– エニグマの対称性からこれはADに等しい	
  
•  同様に2文字目と5文字目はBE、3文字目と6
文字目はCFの置換と等しい	
  
A 1
D
レイェフスキの定理	
•  要素数の等しい2つの置換XとYをサイクル構造
で表したとき、全てのサイクルが互換(要素数2
のサイクル)であるならば、XYをサイクル構造で
表した場合、同じ要素数のサイクルの数は偶
数である	
  
•  逆もまた成り立つ	
  
•  例	
  
X=(A,D)(B,E)(C,F)	
  Y=(A,E)(B,F)(C,D)のとき	
  
XY=(A,C,B)(D,E,F)	
  :要素数3のサイクル☓2	
  
原文を参照したい人は	
  h1p://chc60.fgcu.edu/images/ar:cles/rejewski.pdf	
  
証明概略	
Xの任意の要素a1を起点として、順にX,Yを適用し
て、以下のような順列	
  
を得ることができる	
  
a1 a3 a5 ... a2k 3 a2k 1
a2 a4 a6 ... a2k 2 a2k
X	
 X	
 X	
 X	
 X	
Y	
a2 = X(a1), a3 = Y (a2)
a2k = X(a2k 1), a1 = Y (a2k)
...
証明概略(続)	
この図から、XY=Kとすると、	
  
	
  
	
  
なので長さkの                と	
  
              の2つのサイクルはKを	
  
構成する⇒同じ要素数のサイクルが常にペアで存
在	
  
K(a1) = a3, K(a3) = a5, ...
K(a2) = a2k, K(a4) = a2, ...
a1 a3 a5 ... a2k 3 a2k 1
a2 a4 a6 ... a2k 2 a2k
X	
 X	
 X	
 X	
 X	
Y	
K K K KK
KK K K KK
K
(a1, a3, ..., a2k 3, a2k 1)
(a2, a4, ..., a2k 2, a2k)
レイェフスキの定理(続)	
•  この証明から新たに次の2つの性質が導かれ
る	
  
– XまたはYのある互換に属する文字は、XYにおいて
は同じ長さの異なるサイクルに属する	
  
– XYにおいて、同じ長さの異なるサイクルに属する2
つの文字がXまたはYの互換であったならば、その
両隣(片方は右隣・もう片方は左隣)もXまたはYの
互換である	
  
•  つまり、互換のみから構成されるXとYの積XYが
既知であるならば、そこからXとYの候補を絞り
込むことができる
暗号化されたメッセージ鍵のサンプル	
AXP AVC .. IOV NKZ .. HSA PYT .. PPZ LEX
FZD YQO .. IZL NQL .. NNQ CMA .. GUH BIS
FGT YHD .. KDY GNV .. NBJ COQ .. GOI BKK
MIW MRI .. VWG EZG .. SYX SJB .. TVB KFM
DJG UDG .. OJN QDE .. SNH SMS .. TLI KPK
LNK TMF .. ZAO RXJ .. SXV SVZ .. TYO KJJ
XKN JAE .. CTL OUL .. ERS XWU .. WHJ WBQ
BHG DBG .. CMM OTY .. EAA XXT .. JQR ISH
RZU ZQN .. UKM HAY .. YCE FGR .. JEY ICV
RTC ZUW .. QFF VLP .. PII LRK .. JCE IGP
Source:	
  h1p://www.codesandciphers.org.uk/virtualbp/poles/cyclom.htm	
  
各字目の対応関係から	
  
AD=(LTKGBDUHP)(XJINCOQVE)(FY)(RZ)(A)(M)(S)(W)	
  	
  
BE=(XVFLPECGHBOKA)(ZQSYJDNMTUIRW)	
  
CF=(PCWIKF)(DOJQAT)(NERHSU)(VZXBMY)(L)(G)	
  
を得る。	
  
	
  
先のレイェフスキの定理から、A,B,C,D,E,Fそれぞれ
の候補を絞り込むことができて、	
  
(A)(M) (FY) (LTKGBDUHP)


(S)(W) (ZR) (EVQOCNIJX)
ADの例)	
Aのペアになる
候補がM,S,W	
  
残り2つも	
  
ペアになる	
(F,Z)(Y,R)と(F,R)(Y,Z)2つの可能
性がある	
(L,E)がAに含まれると仮定すると、
Aには他に(T,V)(K,Q)…(P,X)が含ま
れる。全部で9通りの可能性	
  
A,Dの取りうる
可能性は
3*2*9の	
  
54通り
A〜Fの特定	
•  A〜Fの候補から1つに絞り込むにはどうする
か?	
  
– 当時(1932年)のドイツ軍の暗号手順の弱点を突く	
  
– 送信者が自由に決められるメッセージ鍵に
は、”AAA”や”ABC”など簡単に特定できる文字列が
数多く使われていた	
  
– “Whenever	
  there	
  is	
  arbitrariness,	
  there	
  is	
  also	
  a	
  
certain	
  regularity.	
  There	
  is	
  no	
  avoiding	
  it.”	
  -­‐	
  Marian	
  
Rejewski	
  
メッセージ鍵の推測	
•  暗号化されたメッセージ鍵でSYX	
  SJBが最も頻繁
に使用されているとして、これをAAA	
  AAAと仮定	
  
•  この仮説を推し進めて、他にもBBBやABCなどの
キーが現れてくれば、最初の仮説は正しかった
と分かる	
  
AD=(LTKGBDUHP)(XJINCOQVE)(FY)(RZ)(A)(M)(S)(W)	
  	
  
	
  
BE=(XVFLPECGHBOKA)(ZQSYJDNMTUIRW)	
  
	
  
CF=(PCWIKF)(DOJQAT)(NERHSU)(VZXBMY)(L)(G	
  
	
  
AとDには(A,S)が含まれることが確定	
Bに(A,Y)が含まれることが確定するので、他の互換も全て一意に定まる	
  
Cに(A,X)が含まれることにより、C,Fに含まれる6つの互換が定まる
以上の手順でA〜Fを求めることができた	
  
	
  
A=(A,S)(B,N)(C,G)(D,I)(E,P)(F,R)(H,X)(J,U)(K,O)(L,V)(M,W)(Q,T)(Y,Z)	
  
B=(A,Y)(B,N)(C,U)(D,O)(E,I)(F,Z)(G,T)(H,M)(J,K)(L,W)(P,R)(Q,V)(S,X)	
  
C=(A,X)(B,Q)(C,H)(D,V)(E,I)(F,U)(G,L)(J,M)(K,N)(O,Y)(P,S)(R,W)(T,Z)	
  
D=(A,S)(B,C)(D,N)(E,L)(F,Z)(G,O)(H,J)(I,U)(K,Q)(M,W)(P,X)(R,Y)(T,V)	
  
E=(A,J)(B,M)(C,I)(D,K)(E,R)(F,Q)(G,U)(H,T)(L,Z)(N,O)(P,W)(S,V)(X,Y)	
  
F=(A,B)(C,S)(D,Z)(E,K)(F,N)(G,L)(H,W)(I,R)(J,Y)(M,Q)(O,V)(P,U)(T,X)	
  
	
  
A〜Fを定式化する	
  
– 左・中央・右ローターの(メッセージが始まる前の
ローター位置における)置換をそれぞれL,M,Nと置く	
  
– リフレクタの置換をR、プラグボードの置換をSと置く	
  
– Pは1文字進めるだけの置換(A,B,C,…,Y,Z)を表す	
A = SPNP 1
MLRL 1
M 1
PN 1
P 1
S 1
B = SP2
NP 2
MLRL 1
M 1
P2
N 1
P 2
S 1
E = SP5
NP 5
MLRL 1
M 1
P5
N 1
P 5
S 1
F = SP6
NP 6
MLRL 1
M 1
P6
N 1
P 6
S 1
...............
              で共通項を置き換えると、	
Q = MLRL 1
M 1
A = SPNP 1
QPN 1
P 1
S 1
B = SP2
NP 2
QP2
N 1
P 2
S 1
F = SP6
NP 6
QP6
N 1
P 6
S 1
...............
•  S,N,Qの3つの変数(置換)が未知で、このまま
解くのは厳しい	
  
•  しかし丁度いいタイミングでレイェフスキの手
元にドイツ軍の日鍵のデータが届く	
  
⇒プラグボード配列Sが既知となった	
  
残る未知数はNとQ Qを消去することを考える	
  
既知のPとSを左辺に追い出し、U〜Zと置く	
...............
Z = P 6
S 1
FSP6
= NP 6
QP6
N 1
V = P 2
S 1
BSP2
= NP 2
QP2
N 1
U = P 1
S 1
ASP = NP 1
QPN 1
UV = NP 1
(QP 1
QP)PN 1
V W = NP 2
(QP 1
QP)P2
N 1
WX = NP 3
(QP 1
QP)P3
N 1
XY = NP 4
(QP 1
QP)P4
N 1
Y Z = NP 5
(QP 1
QP)P5
N 1
各値の積を取ると、
共通項       を消去して以下の式を得る	
QP 1
QP
V W = NP 1
N 1
(UV )NPN 1
WX = NP 1
N 1
(V W)NPN 1
XY = NP 1
N 1
(WX)NPN 1
Y Z = NP 1
N 1
(XY )NPN 1
G = T 1
HT         という形の変換が持つ性質を利用
して、      を一意に定めることができる	
  
      	
  
NPN 1
NPN 1
置換の共役性について	
置換GとHの間に、ある置換Tが存在して	
  
	
  
という関係が成り立つとき	
  
•  置換Gを得るためには、置換Hの中の各文字
をTで置き換えてあげればよい	
  
•  GとHのサイクル構造は一致する	
  
•  Tが未知の場合、H・G間でサイクル構造を保
持する置換を考えればよい	
  
(群論の世界ではこの関係を共役という)	
G = T 1
HT
例	
UV	
  =	
  (A,O,J,P,Z,K,I)(B,G,T,F,Y,R)(C,E,W,V,H,S,D)(L,X,U,M,N,Q)	
  
VW	
  =	
  (A,L,E,J,V,X)(B,Q,R,D,Y,Z,H)(C,O,T,W,G,I)(F,U,K,S,N,P,M)	
  
WX	
  =	
  (A,O,M,Y,W,N,T)(B,S,R,C,U,I)(D,J,G,E,Z,L,P)(F,H,K,X,Q,V)	
  
XY	
  =	
  (A,D,M,C,G,R)(B,P,I,N,Z,S,V)(E,H,O,F,J,Y)(K,T,L,Q,W,X,U)	
  
YZ	
  =	
  (A,S,L,B,D,K)(C,O,M,X,I,G,Q)(E,U,Z,T,H,V)(F,W,P,Y,R,J,N)	
これらのサイクル構造を保持しながら、UV	
  =>	
  VW	
  =>	
  VWと
置き換えていく置換を考えれば、      を一意に定める
ことができる	
      が求まれば、同様の方法でNの候補を求められ
る(候補は26個あり、ローターの回転ごとにずれているだけ
で実質的に違いはない)	
NPN 1
NPN 1
ローター配線の解明 	
  	
•  こうして右ローターNの配線を解明できた	
  
•  当時ドイツ軍は四半期に一度ローターの配列
を変更していたが、レイェフスキの手元には、
1932年9月と10月の日鍵一覧があった	
  
– つまり、異なる2つのローター配線を解明できた	
  
– 2つのローター配線が既知になったことにより、残
り1つのローター配線とリフレクタの配線は簡単
に計算できる(と、レイェフスキは書いているが詳
細な記述なし・未検証)	
  
ローター配線の解明後	
•  傍受した暗号文と日鍵からエニグマの内部配
線を解明できた	
  
•  今度は日鍵が不明な暗号文から日鍵を割り
出す必要がある	
  
•  レイェフスキは膨大なプラグボードの設定を
無効化する方法を考えた	
  
特性シート	
•  AD,BE,CFのサイクル構造(特性”characteris:c”と
呼ばれる)はプラグボードの設定に依存しないと
いう性質を利用	
  
•  あらかじめサイクルの構造をキーにして、ロー
ターの設定を網羅した表を用意しておき、それと
照らし合わせることでロータ設定を絞り込む	
  
	
  
例	
AD=(LTKGBDUHP)(XJINCOQVE)(FY)(RZ)(A)(M)(S)(W)	
  	
  
BE=(XVFLPECGHBOKA)(ZQSYJDNMTUIRW)	
  	
  
CF=(PCWIKF)(DOJQAT)(NERHSU)(VZXBMY)(L)(G)	
  
のとき各サイクルの構造は [9,9,2,2,1,1,1,1][13,13]
[6,6,6,6,1,1]と表せる)	
  
ポーランドその後	
•  レイェフスキらの成果(軍事用エニグマの複
製含む)は、1939年にイギリスとフランスに引
き継がれた	
  
•  当時イギリス・フランスは軍事用エニグマの配
線すら解明できておらず、ポーランドの成果
なしではその後のドイツ暗号解読に至ってい
なかったことも考えられる	
  
イギリスによるエニグマ解読	
  
チューリング・ボンベの仕組み
ボンベ誕生の背景	
•  ポーランドは「メッセージ鍵は二度暗号化され
る」という事実を突き、暗号解読に成功した	
  
•  しかし、いずれドイツ側もこの弱点に気付き、
手順が改善されるだろうという予測もあった	
  
•  メッセージ鍵の弱点に頼らずに、暗号を解読
する方法を模索していた	
  
基本的なアイデア	
•  ローターの設定ごとに、プラグボードのペアリ
ングの推論を行い、矛盾のある設定を除外し
ていく	
  
– 例えば、プラグボードでMとAがペアになっている
という仮定からMとSがペアになると推論される場
合、ある1文字に対してペアになる文字は高々1
文字であるという原則に反する	
  
•  上記の推論を行うためにクリブ(暗号文と平
文の対応が分かっている箇所)が必要になる
クリブ	
•  メッセージに頻繁に現れる定型句などに注目す
る	
  
– Keine	
  Besondere	
  Ereignisse(報告事項なし)、
Vorhersagebereich	
  Sieben(第7区の天気予報)など	
  
メニュー	
•  クリブの平文・暗号文の対応関係をグラフ化
したもの	
  
•  初期のボンベは、この中に現れる「閉鎖ルー
プ」に着目した	
  
source:h1p://www.rutherfordjournal.org/ar:cle030108.html	
閉鎖ループ
推論の進め方	
•  ローター設定を固定し、SとBがプラグボードでペアに
なっていると仮定する	
  
=>Bを暗号化してZ=>ZとAがペア	
  
=>Zを暗号化してD=>….=>SとLがペア	
  
平文 D A S X I S T X E I N X	
暗号 V J A R E V E A D J E V	
最初の仮定(ローター
設定か、SとBがペアで
あることのいずれか)
が間違っていた	
矛盾!	
B L D D 	
Z C Z C
Z C Z C 	
B L D D 	
初期ボンベの仕組み	
•  プラグボードの効果は打ち消し合うので無視できる	
  
•  プラグボード無しで、クリブの文字位置に応じてローター
位置を進めた複数の擬似エニグマ回路を直列につなぐ	
  
•  最初にペアになっていると仮定した文字を突っこみ、最
初と最後に矛盾があるかどうかだけを見ればよい	
  
擬似	
  
エニグマ	
  
(AAA)	
プラグ無し	
SとBがプラグ結線さ
れており、初期ロー
ター位置をAAAとした
場合	
 擬似	
  
エニグマ	
  
(AAD)	
擬似	
  
エニグマ	
  
(AAF)	
擬似	
  
エニグマ	
  
(AAJ)	
矛盾
初期ボンベの仕組み(続)	
•  矛盾があれば次のプラグボードのペアの仮
説(SとC,SとD,…)を試し、26文字全てでダメなら、
ローター位置を一つ進める	
  
•  これをローター配列・位置ごとに繰り返す	
  
•  矛盾が見つからない場合、ボンベは停止し、
その時点のローター設定・プラグボードペア
の仮説を示してくれる	
  
上段:エニグマ機
の右ローター	
中段:エニグマ機
の中央ローター	
下段:エニグマ機
の左ローター	
各列が1台の擬似的な
エニグマ機を構成する	
  
各列の出力が次の列の入力
となり、エニグマ機を直列につ
ないでいることになる
偽の停止(False	
  Stop)	
•  誤ったローター設定・プラグボード設定だが、
最初のプラグボードの仮定と矛盾のない結果
が得られしまう場合でも、ボンベは停止する	
  
•  ボンベ停止後、真偽を判定するために、手作
業で確認する必要があった	
  
•  初期ボンベでは偽の停止が起こる確率は1/26(!)	
  
チューリング・ボンベの高速化
初期チューリング・ボンベの問題点	
•  偽の停止が多く、解読までに時間がかかる	
  
•  閉鎖ループを得るためにある程度長いクリブ
が必要	
  
•  クリブが長いと途中でローターがターンオー
バーする可能性が高くなる	
  
– ボンベはターンオーバーを考慮していない	
  
フィードバック・ループ	
•  推論の結果導き出されたペアリング設定は、
最初の仮定と矛盾していたとしても、新たな	
  
偽の仮定として回路への入力に使える	
  
– 回路の出力と入力をつないでしまおう、という発想	
  
Z M C Z C 	
B  L D D 	
擬似	
  
エニグマ	
  
(AAA)	
擬似	
  
エニグマ	
  
(AAD)	
擬似	
  
エニグマ	
  
(AAF)	
擬似	
  
エニグマ	
  
(AAJ)	
	
  	
  …	
  	
  	
エニグマ機の対称性から、
偽の仮説からは偽の結
果しか導き出されず、双
方向的	
  
S/Bがペア=>S/Lがペア	
  
S/Lがペア=>S/Bがペア	
  
フィードバック・ループ(続)	
•  このフィードバック回路の入力と出力もまたサ
イクルをなす	
  
– 例	
  (B,L,K,O)(C,Z,A,I)…	
  
– この場合、S/Bのペアリング仮説を試せば、S/B,S/
L,S/K,S/Oの仮説が同時に偽であると証明できる	
  
フィードバック・ループ(続)	
•  2つ以上のループを持つクリブでは、このフィード
バック回路を2つ作ることができる	
  
–  例 フィードバック回路のサイクル	
  
1:	
  (ACKSMPT)(BREGOXQULHJNVW)(DYZ)(I)(F)	
  
2:	
  (AJUGFWQLRSCZMO)(BHDKY)(EV)(NTXP)(I)	
  
–  この場合最初の文字がAとペアになっているという仮説
を試すと、異なるサイクルを通して到達可能な文字が
広がり、結果として26個全ての文字に電流が到達する	
例は h1p://www.amazon.com/Gordon-­‐Welchman-­‐Bletchley-­‐Architect-­‐Intelligence/dp/1848327528 から抜粋	
  
フィードバック・ループ(続)	
•  ただしローター配列・位置が正しい場合、最初の
ペアリングの仮説が偽であれば、正しいペアリン
グの文字に行き着くことはない(もし正しい文字
に行き着いたとすると、エニグマの対称性から、
最初の偽の仮説も真ということになってしまう)	
  
•  よって正しいローター配列・位置では、以下の現
象が起こる	
  
–  最初のペアリング仮説が正しければ、その1文字だけ
に電流が疎通する	
  
–  正しくなければ、残りの25文字に電流が疎通する	
  
(ただし、偽の停止問題は依然起こりえる)	
  
Diagonal	
  Board(対角ボード)	
•  ループだけでなくメニュー全体を使う	
  
•  プラグボードの対称性を利用して、途中で導か
れるプラグボードの推論結果を別の箇所の入
力として使う	
  
ここでDとSがペアになるという
結果になった場合、別のSのペ
アとしてDを入力する
Diagonal	
  Board(対角ボード)(続)	
メニュー文字CがDとペ
アであるという結果	
  
⇒メニュー文字DはCと
ペアになっているはず	
メニューの文字	
入力(ペアリングの仮定)	
h1p://www.amazon.com/Gordon-­‐Welchman-­‐Bletchley-­‐Architect-­‐Intelligence/dp/1848327528	
  
Diagonal	
  Board(対角ボード)(続)	
•  これにより一つの仮定から到達できる文字の範
囲を大幅に広げられる(同時にスキャンできる数
が増えた)	
  
•  偽の停止が減り、少ないメニューでも暗号解読
が可能になった	
  
•  ループの存在しない(十分な長さのあるメニュー
であれば)暗号解読が可能になった	
Source:	
  “From	
  Bombe	
  ‘stops’	
  to	
  Enigma	
  keys”	
  	
  by	
  Frank	
  Carter	
  
各ローター配列ごとの“偽の停止“数の期待値
デモ	
•  ペアリング仮説の広がりを可視化したデモ
h1ps://github.com/thorikawa/PyEnigma	
P	
 V	
C	
A	
N	
D	
E	
R	
Y	
L	
J	
Z	
 O	
H	
K	
G	
T	
W	
2	
 9	
18	
10	
12	
 11	
14	
5	
13	
4	
15	
20	
16,19	
7	
17	
 3	
8
今日話せなかったこと 	
  	
•  エニグマの日鍵を割り出すための「グリル法」	
  
•  ドイツの暗号送信手順が変わった後にポーラ
ンドが暗号解読のために発明した「(ポーラン
ドの)ボンベ」と「ザイガルスキのシート」	
  
•  チューリング・ボンベの前段階としてローター
配列を絞り込むための「バンブリスムス」	
  
•  「イミテーション・ゲーム」の色々	
  
– ちゃんと分かってから見ると、色々おかしな興味
深い点がたくさんあります
ありがとうございました

More Related Content

What's hot

最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解くshindannin
 
深層学習による非滑らかな関数の推定
深層学習による非滑らかな関数の推定深層学習による非滑らかな関数の推定
深層学習による非滑らかな関数の推定Masaaki Imaizumi
 
曲線から多様体まで駆け抜ける微分幾何学入門
曲線から多様体まで駆け抜ける微分幾何学入門曲線から多様体まで駆け抜ける微分幾何学入門
曲線から多様体まで駆け抜ける微分幾何学入門Masanari Kimura
 
マルコフ連鎖モンテカルロ法入門-1
マルコフ連鎖モンテカルロ法入門-1マルコフ連鎖モンテカルロ法入門-1
マルコフ連鎖モンテカルロ法入門-1Nagi Teramo
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami
 
BERTに関して
BERTに関してBERTに関して
BERTに関してSaitama Uni
 
2 5 2.一般化線形モデル色々_ロジスティック回帰
2 5 2.一般化線形モデル色々_ロジスティック回帰2 5 2.一般化線形モデル色々_ロジスティック回帰
2 5 2.一般化線形モデル色々_ロジスティック回帰logics-of-blue
 
200604material ozaki
200604material ozaki200604material ozaki
200604material ozakiRCCSRENKEI
 
How to generate PowerPoint slides Non-manually using R
How to generate PowerPoint slides Non-manually using RHow to generate PowerPoint slides Non-manually using R
How to generate PowerPoint slides Non-manually using RSatoshi Kato
 
ウィナーフィルタと適応フィルタ
ウィナーフィルタと適応フィルタウィナーフィルタと適応フィルタ
ウィナーフィルタと適応フィルタToshihisa Tanaka
 
Tokyo.R #46 Cox比例ハザードモデルとその周辺
Tokyo.R #46  Cox比例ハザードモデルとその周辺Tokyo.R #46  Cox比例ハザードモデルとその周辺
Tokyo.R #46 Cox比例ハザードモデルとその周辺kikurage1001
 
動的計画法入門(An introduction to Dynamic Programming)
動的計画法入門(An introduction to Dynamic Programming)動的計画法入門(An introduction to Dynamic Programming)
動的計画法入門(An introduction to Dynamic Programming)kakira9618
 
スパースモデリング
スパースモデリングスパースモデリング
スパースモデリングharapon
 
高速フーリエ変換
高速フーリエ変換高速フーリエ変換
高速フーリエ変換AtCoder Inc.
 
グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門Kawamoto_Kazuhiko
 
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 Ken'ichi Matsui
 
PRML上巻勉強会 at 東京大学 資料 第1章前半
PRML上巻勉強会 at 東京大学 資料 第1章前半PRML上巻勉強会 at 東京大学 資料 第1章前半
PRML上巻勉強会 at 東京大学 資料 第1章前半Ohsawa Goodfellow
 

What's hot (20)

最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
深層学習による非滑らかな関数の推定
深層学習による非滑らかな関数の推定深層学習による非滑らかな関数の推定
深層学習による非滑らかな関数の推定
 
曲線から多様体まで駆け抜ける微分幾何学入門
曲線から多様体まで駆け抜ける微分幾何学入門曲線から多様体まで駆け抜ける微分幾何学入門
曲線から多様体まで駆け抜ける微分幾何学入門
 
マルコフ連鎖モンテカルロ法入門-1
マルコフ連鎖モンテカルロ法入門-1マルコフ連鎖モンテカルロ法入門-1
マルコフ連鎖モンテカルロ法入門-1
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
 
BERTに関して
BERTに関してBERTに関して
BERTに関して
 
Graph U-Nets
Graph U-NetsGraph U-Nets
Graph U-Nets
 
2 5 2.一般化線形モデル色々_ロジスティック回帰
2 5 2.一般化線形モデル色々_ロジスティック回帰2 5 2.一般化線形モデル色々_ロジスティック回帰
2 5 2.一般化線形モデル色々_ロジスティック回帰
 
Prml14 5
Prml14 5Prml14 5
Prml14 5
 
200604material ozaki
200604material ozaki200604material ozaki
200604material ozaki
 
How to generate PowerPoint slides Non-manually using R
How to generate PowerPoint slides Non-manually using RHow to generate PowerPoint slides Non-manually using R
How to generate PowerPoint slides Non-manually using R
 
ウィナーフィルタと適応フィルタ
ウィナーフィルタと適応フィルタウィナーフィルタと適応フィルタ
ウィナーフィルタと適応フィルタ
 
Tokyo.R #46 Cox比例ハザードモデルとその周辺
Tokyo.R #46  Cox比例ハザードモデルとその周辺Tokyo.R #46  Cox比例ハザードモデルとその周辺
Tokyo.R #46 Cox比例ハザードモデルとその周辺
 
動的計画法入門(An introduction to Dynamic Programming)
動的計画法入門(An introduction to Dynamic Programming)動的計画法入門(An introduction to Dynamic Programming)
動的計画法入門(An introduction to Dynamic Programming)
 
スパースモデリング
スパースモデリングスパースモデリング
スパースモデリング
 
高速フーリエ変換
高速フーリエ変換高速フーリエ変換
高速フーリエ変換
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
グラフィカルモデル入門
グラフィカルモデル入門グラフィカルモデル入門
グラフィカルモデル入門
 
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
 
PRML上巻勉強会 at 東京大学 資料 第1章前半
PRML上巻勉強会 at 東京大学 資料 第1章前半PRML上巻勉強会 at 東京大学 資料 第1章前半
PRML上巻勉強会 at 東京大学 資料 第1章前半
 

Viewers also liked

「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg
「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg
「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pgJunpei Tsuji
 
フーリエ変換と画像圧縮の仕組み
フーリエ変換と画像圧縮の仕組みフーリエ変換と画像圧縮の仕組み
フーリエ変換と画像圧縮の仕組みyuichi takeda
 
証明プログラミング入門2
証明プログラミング入門2証明プログラミング入門2
証明プログラミング入門2Kyoko Kadowaki
 
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列Taketo Sano
 
20170920_FinSumWorkshop_ZaisanNet
20170920_FinSumWorkshop_ZaisanNet20170920_FinSumWorkshop_ZaisanNet
20170920_FinSumWorkshop_ZaisanNetShirabe Ogino
 
為替と株の予測の話
為替と株の予測の話為替と株の予測の話
為替と株の予測の話Kentaro Imajo
 
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介Masayuki Ozawa
 
Azure Virtual Machines設計の勘所 | Microsoft Tech Summit 2017
Azure Virtual Machines設計の勘所 | Microsoft Tech Summit 2017Azure Virtual Machines設計の勘所 | Microsoft Tech Summit 2017
Azure Virtual Machines設計の勘所 | Microsoft Tech Summit 2017Kuniteru Asami
 
Deep Learningを用いたロボット制御
Deep Learningを用いたロボット制御Deep Learningを用いたロボット制御
Deep Learningを用いたロボット制御Ryosuke Okuta
 
基底変換、固有値・固有ベクトル、そしてその先
基底変換、固有値・固有ベクトル、そしてその先基底変換、固有値・固有ベクトル、そしてその先
基底変換、固有値・固有ベクトル、そしてその先Taketo Sano
 
今さら聞けないカーネル法とサポートベクターマシン
今さら聞けないカーネル法とサポートベクターマシン今さら聞けないカーネル法とサポートベクターマシン
今さら聞けないカーネル法とサポートベクターマシンShinya Shimizu
 

Viewers also liked (12)

「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg
「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg
「時計の世界の整数論」第2回プログラマのための数学勉強会 #maths4pg
 
フーリエ変換と画像圧縮の仕組み
フーリエ変換と画像圧縮の仕組みフーリエ変換と画像圧縮の仕組み
フーリエ変換と画像圧縮の仕組み
 
証明プログラミング入門2
証明プログラミング入門2証明プログラミング入門2
証明プログラミング入門2
 
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
 
20170920_FinSumWorkshop_ZaisanNet
20170920_FinSumWorkshop_ZaisanNet20170920_FinSumWorkshop_ZaisanNet
20170920_FinSumWorkshop_ZaisanNet
 
為替と株の予測の話
為替と株の予測の話為替と株の予測の話
為替と株の予測の話
 
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
Dal001 sql server 2017 事始め ~ 進化を続ける sql server の最新情報を一挙紹介
 
Azure Virtual Machines設計の勘所 | Microsoft Tech Summit 2017
Azure Virtual Machines設計の勘所 | Microsoft Tech Summit 2017Azure Virtual Machines設計の勘所 | Microsoft Tech Summit 2017
Azure Virtual Machines設計の勘所 | Microsoft Tech Summit 2017
 
Deep Learningを用いたロボット制御
Deep Learningを用いたロボット制御Deep Learningを用いたロボット制御
Deep Learningを用いたロボット制御
 
基底変換、固有値・固有ベクトル、そしてその先
基底変換、固有値・固有ベクトル、そしてその先基底変換、固有値・固有ベクトル、そしてその先
基底変換、固有値・固有ベクトル、そしてその先
 
[Japan Tech summit 2017] SEC 003
[Japan Tech summit 2017] SEC 003[Japan Tech summit 2017] SEC 003
[Japan Tech summit 2017] SEC 003
 
今さら聞けないカーネル法とサポートベクターマシン
今さら聞けないカーネル法とサポートベクターマシン今さら聞けないカーネル法とサポートベクターマシン
今さら聞けないカーネル法とサポートベクターマシン
 

More from Takahiro (Poly) Horikawa

The Land of Oz 20191109 Magic Leap x docomo meetup
The Land of Oz 20191109 Magic Leap x docomo meetupThe Land of Oz 20191109 Magic Leap x docomo meetup
The Land of Oz 20191109 Magic Leap x docomo meetupTakahiro (Poly) Horikawa
 
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM)
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM) コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM)
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM) Takahiro (Poly) Horikawa
 
加速度センサーで円運動を検出する
加速度センサーで円運動を検出する加速度センサーで円運動を検出する
加速度センサーで円運動を検出するTakahiro (Poly) Horikawa
 
第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて
第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて
第10回Mozilla拡張機能勉強会-FireMobileSimulatorについてTakahiro (Poly) Horikawa
 

More from Takahiro (Poly) Horikawa (10)

The Land of Oz 20191109 Magic Leap x docomo meetup
The Land of Oz 20191109 Magic Leap x docomo meetupThe Land of Oz 20191109 Magic Leap x docomo meetup
The Land of Oz 20191109 Magic Leap x docomo meetup
 
生命を記述する数学
生命を記述する数学生命を記述する数学
生命を記述する数学
 
Android Wear Development
Android Wear DevelopmentAndroid Wear Development
Android Wear Development
 
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM)
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM) コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM)
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM)
 
Android開発の基礎_20101218
Android開発の基礎_20101218Android開発の基礎_20101218
Android開発の基礎_20101218
 
加速度センサーで円運動を検出する
加速度センサーで円運動を検出する加速度センサーで円運動を検出する
加速度センサーで円運動を検出する
 
PRML chapter5
PRML chapter5PRML chapter5
PRML chapter5
 
PRML chapter7
PRML chapter7PRML chapter7
PRML chapter7
 
ESPer2008-FireMobileSimulatorについて
ESPer2008-FireMobileSimulatorについてESPer2008-FireMobileSimulatorについて
ESPer2008-FireMobileSimulatorについて
 
第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて
第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて
第10回Mozilla拡張機能勉強会-FireMobileSimulatorについて
 

Recently uploaded

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 

Recently uploaded (9)

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 

エニグマ暗号とは何だったのか