1. 平文入力
2. 暗号化設定
鍵の設定
モードと整形
1. 暗号文入力
2. 復号設定
鍵の設定
モード設定
二重転置(未実装)
縦→縦、縦→横の二重転置を可視化予定です。歴史的にはニヒリスト式(縦+横)も知られています。
📚 縦列転置式暗号とは
基本原理
縦列転置式暗号(Columnar Transposition Cipher)は、平文の文字の順序を体系的に並べ替える転置式暗号の一種です。
- 平文を横方向(行方向)にマトリクスへ書き込む
- 鍵に基づいて列を並べ替える
- 縦方向(列方向)に読み出して暗号文を生成
例:キーワード "KEY" での暗号化
平文: HELLO WORLD 鍵順: K=2, E=1, Y=3 マトリクス(書き込み): K E Y 2 1 3 ------- H E L L O W O R L D X X (Xはパディング) 列の並べ替え(鍵順で): E K Y 1 2 3 ------- E H L O L W R O L X D X 暗号文(縦読み): EORX HLOD LWLX
暗号の種類と特徴
①完全/不完全
完全モード:パディング文字で長方形にする
不完全モード:最終行が欠けたまま処理
②鍵の種類
キーワード:単語をアルファベット順で数値化
数列:直接数値で列順を指定(例: 3,1,4,2)
③二重転置
縦→縦:2回縦列転置を適用
縦→横:縦列転置後、横行転置(ニヒリスト式)
④派生形
斜め読み出し:対角線方向に読む
らせん読み出し:渦巻き状に読む
転置式暗号の歴史と背景
古代〜中世
スパルタのスキュタレー暗号など、初期の転置式暗号が登場。巻物を棒に巻きつけて文字を読む方式。
1880年頃 - ニヒリスト式
帝政ロシアの革命家ニヒリストたちが使用。獄中のミハイロフが二重転置(縦×横)を考案。秘密警察に解読されるも、暗号史に名を残す。
第一次世界大戦
軍事通信で広く使用。ドイツ軍のUBCHI暗号など、複雑な鍵管理を伴う転置式暗号が発展。
第二次世界大戦
機械式暗号機(エニグマ暗号等)が主流になるも、簡易暗号として継続使用。とくに野戦部隊で重宝される。
暗号学的特性
セキュリティ分析
- 拡散(Diffusion):文字の位置を分散させる効果あり
- 混同(Confusion):なし(文字の置換は行わない)
- 頻度分析への耐性:弱い(文字頻度は保存される)
攻撃手法
- 総当たり攻撃:鍵長nに対してn!通りの組み合わせ
- 頻度分析:言語の文字頻度パターンから推測
- アナグラム攻撃:部分的な単語を復元して鍵を推定
縦列転置式暗号は教育目的や暗号学の基礎理解には優れていますが、現代のセキュリティ要件を満たしません。実用的な暗号化にはAESなどの現代暗号を使用してください。
他の古典暗号との比較
暗号方式 | 種類 | 操作 | 特徴 |
---|---|---|---|
縦列転置式 | 転置 | 文字の並べ替え | 文字頻度は保存される |
シーザー暗号 | 換字 | 文字のシフト | 単純な頻度分析で破れる |
ヴィジュネル暗号 | 換字 | 複数のシフト | 多表式で頻度分析に強い |
レールフェンス暗号 | 転置 | ジグザグ配置 | 鍵なし転置の一種 |
プレイフェア暗号 | 換字 | 2文字組の置換 | 頻度分析への耐性向上 |
実装のポイント
暗号化アルゴリズム
- 平文の前処理(スペース除去、大文字化など)
- 鍵から列順序を決定(キーワード→数値変換)
- マトリクスへの行方向書き込み
- 必要に応じてパディング追加
- 鍵順での列の並べ替え
- 列方向での読み出し
復号アルゴリズム
- 暗号文の長さと鍵から行数を計算(行数 = ceil(暗号文長 ÷ 列数))
- 各列の高さを決定(不完全モードでは注意)
- 鍵順にしたがって暗号文を列に配分
- 元の列順序に戻す
- 行方向で読み出して平文を復元
- パディングの除去(完全モードの場合)
ceil(シーリング)は天井関数とも呼ばれ、小数点以下を切り上げる数学関数です。
例:ceil(3.2) = 4、ceil(5.0) = 5、ceil(2.1) = 3
復号時の行数計算で使用し、暗号文がマトリクスに完全に収まるよう必要最小限の行数を求めます。
練習問題
問題1:基本的な暗号化
平文 "MEET ME AFTER" をキーワード "CAT" で暗号化してみましょう。
解答を見る
キーワード: CAT → C=2, A=1, T=3 マトリクス: C A T 2 1 3 ----- M E E T M E A F T E R X 並べ替え後(A,C,T順): A C T 1 2 3 ----- E M E M T E F A T R E X 暗号文: EMFR MTAE EETX
問題2:不完全モードの復号
暗号文 "EOIE SRMN VDC" を数列 "2,1,3" で復号してみましょう(不完全モード)。
解答を見る
暗号文長: 10文字、鍵長: 3 行数: ceil(10/3) = 4行 ※ceil:天井関数(切り上げ) 列の高さ: [4,3,3](最初の1列のみ4行) 配分: 列1(順2): EOIE (4文字) 列0(順1): SRM (3文字) 列2(順3): VDC (3文字) 元の順序に戻す: 0 1 2 ----- S E V R O D M I C - E - 平文: SERVED MICE