数字暗号とコード・コンデンサー――コンピューター以前の情報圧縮

電信が遠隔通信の主役であった時代,単語や句,さらには文を短いコードで置き換えて伝送する電信コードが用いられた.よくできた電信コードを熟練した担当者が使えば費用節減の効果は大きく,通信量の多い企業にとっては専用のコード係を雇うだけの価値があった.その意味では句や文を登録した電信コードブックはみな情報圧縮の効果があるといえる(現代のコンピューター用の情報圧縮(エントロピー符号化)でも,頻出するパターンをリストに登録しておいて短いパターンで表わすという発想は生かされている).商取引ではさらに,品名・数量・出荷時期などさまざまな情報を一つの数字で表わし,英字コードに直して送信するいわゆる「数字暗号」(figure code)が考案された.時期・地域にもよるがおおむね暗号電報は英字10字までは1語としてカウントされていたので(詳細は別稿(英文)参照),英字10字にいかに効率的に情報を詰め込むかに工夫がこらされた.まさに電信時代の情報圧縮の最たるものといえるだろう.

典型的な手順は次のようになる.

1.エンコード段階.数字の各桁でさまざまな情報を表わす.たとえば,100個の品名のリストに00〜99の番号が付けられた表を参照して第1,2桁の数字を決め,100通りの数量のリストを見て第3,4桁の数字を決め,出荷時期の表を見て第5桁を決めるなどとしていく.

2.数字変換段階.数字(10桁,12桁,13桁など)を英字10字のコード語に変換する.

さまざまな情報をエンコードした数字をわざわざ英字に変換するのには二つの理由がある.国際電信規則では,意味のない英数字の羅列は「サイファー」(「秘辞」・「秘語」)とみなされ,5字で1語と数えられることになっていた.これに対して「単語」である「コード」(「隠語」)は10字まで認められていたので,英字のほうが1語に詰め込める情報量が多くなる.さらに,数字を伝送する場合,1字でも違えば全く違う数字になってしまうのに対し,英字コードなら送信エラーがあれば登録されていない文字列になって,エラーが発見できる可能性がある.字数当たりの情報量の多い英字コードを使うことで,誤り検出・誤り訂正能力が高いコードを作成する余地があるのである.


目次

数字を使わない初期のエンコード

数字によるエンコード

数字から英字への変換

コード・コンデンサー

10桁までの数字変換表

12桁数字暗号

13桁数字暗号

14桁数字暗号

用語について

数字を使わない初期のエンコード

数字の各桁でそれぞれ別種の情報を表わすという発想は単純だが,その方式が普及する前には表を使って複数の情報に英字コードを割り当てるという方式が使われていた.

Meyer's Cotton Telegraph Code (1871)

Private Telegraphic Code (1871, New Orleans and Liverpool)

Watts's Telegraphic Cypher (1872, Liverpool)


表現すべき情報の一部が変わるたびに全く異なる単語を割り当てるのはまどろっこしい.そこで,接頭辞や接尾辞で特定の意味を表わすもの:

Electro-Magnetic Telegraph Vocabulary, or, condensing correspondent, designed to communicate commercial and other general intelligence, in abbreviated form and at small expense (1846, Baltimore) by John Wills

Parker's Combination Telegraph Code (1880) by Thomas Parker

また,音節に情報を割り当ててそれを組み合わせて「単語」を作るもの:

Telegraph Cypher for Transmitting Telegrams relating to Foreign News, Stocks, Gold, Cotton, Financial Matters, etc., in a Commercial Form (1867) by Martin K. Thompson

もあった.


数字によるエンコード

1880年ごろから,数字の各桁に意味をもたせるという発想が登場した.数字によるエンコードをしてから数字を英字に変換するという二段階に分けることで,コードの作成・使用が簡単になる.特に,表現すべき情報は使用者によってさまざまなので,その部分を切り離すことで,使用者がその部分だけ独自に作成できる.(逆に,コード出版者は数字変換に特化した汎用性の高いコードブックを作成することができる.)

Ager (1880)

各桁に意味をもたせるエンコードの初期の例としては,AgerのThe Telegram Code (1880)(これは第3版)のp.ivが,語句を英字コードで表わすコードブックで各エントリーに付された5桁数字を使って数量,価格,品質などの取引情報を一語で表わすことができることを記載している.

挙げられている例では,Mutualという英字コード(本来はWe recommend purchase of -- as crop is injuredというフレーズを表わすもの)には29795という番号が付されており,この数字のほうを使って,たとえば2が「21日以内」,9が「グラスゴー宛」,79が「1バレル当たり16シリング9ペンス」,5が注文番号を表わすようにする.具体的に価格などを数字に割り当てるためには,空欄の表が設けられている.

Ager (1879?)

Agerの同様のものが上田貢太郎『外国為替と電信暗号』(1895)で紹介されている.(おそらくAger's Standard Telegram Code of 100,000 Words (1879)とその補遺を指すものと思われるが筆者未見.)

それによれば,5桁数字の最初の2桁で商品を表わし,後半の3桁は数量・船積時期・代価の組み合わせを表わす.数量・船積時期・代価は,それぞれ別の表を用いて1〜5,1〜5,1〜25の数字に直し,それを組み合わせ表に従って3桁数字に変換する.この組み合わせ表は縦軸に数量・船積時期の5×5=25通りの組み合わせ,横軸に25通りの代価を取って625通りの組み合わせに番号を割り当てたものである(表は上田p.41〜47).

単純に考えると5×5×25=625通りからなる3種の情報の組み合わせを表わすには5通りの数量に1桁,5通りの船積時期に1桁,25通りの代価に2桁で4桁の数字が必要になりそうだが,4つの表を組み合わせて使うことで一つの3桁数字でエンコードしている.

こうして取引情報をエンコードした5桁数字を"00000 aafsch", "00001 aakste", "00002 aalbes", ..., "00252 Abbaruffo", ..., "99999 Iravail"のように割り当てたコード表を使って英字の単語に変換する.

数字から英字への変換

既存のコードブックの利用

このような方式では数字を英字コードに対応付ける表が必要になる.Agerに限らず,多くのコードブックでは英字コードに連番が付されていたので,それを利用して英字コードを使って数字を表わすという発想は電信コード登場後まもないころからあった(別稿(英文)参照).数字を使ってさまざまな情報をエンコードできることが認識されると,語句のコード化はさておいて,既存のコードブックの数字と英字コードの対応だけを数字から英字コードへの変換に利用することも広まっていった.数字のエンコードのために既存のコードブックの対応表を利用することは,Macgregor's Variation Tables for Code Telegraphing (1881)などで紹介されている.

数字変換用のコードブック

数字を英字コードに変換するためだけのコードブックも登場した.Whitelawによる一連のコードブックはこのように数字と英字コードを対応させるためだけのものである.

1880年代には5桁数字を英字コードに変換する"Exchange" Codeとか"Nonpareil" Codeなども現われた(別稿(英文)参照).

数字を英字コードに変換するといっても,25,000 English Words (1879)のように単純に英単語のコードを羅列しただけのものもあれば,Latin Combination Telegraph Code of 10,000 Cypher Words (1908)のようにラテン語の語幹と語尾の組み合わせを使って表わすものもあった.


変換規則(変換表)

現実の単語を使う以上,語幹と語尾の組み合わせを使うなどの工夫をしても,基本的には単語を羅列にならざるをえない.だが,規則によって数字を英字に変換するようにすれば,極端な話,一つの表だけで用は足りる.

The Westinghouse Code (1902)は10桁数字を10字の「単語」に変換する規則を掲載している.具体的には,次のような表を利用して2数字ごとに母音と子音を含む2英字に変換するのである.


ただし,当時の国際電信規則では,コード語は英語,フランス語など8か国語のいずれかの本物の単語でなければならないという決まりがあったので,子音+母音の組み合わせを適宜母音+子音に入れ換えたり,別途用意されている代替文字を使うなどして単語らしく見えるようにすることを提案している.

例:2つの5桁数字21665 27010を10字の英字コードに変換する.
2166527010 → 21 66 52 70 10
             eg vo co ud an → egvocoudan

1903年の国際電信規則改訂(1904年施行)により,コード語が本物の単語でなければならないという制約が取り払われ,発音可能であればよいことになった.これにより,英字コード語を機械的に生成することが公式に許されることになった.(以後,人工的に作った英字5字のコードを2語をつなげて10字として送信することによって,電信料金を半分にすることが主流となる.このへんのいきさつについては別稿(英文)参照.)


China Inland Mission Private Telegraph Code (1907)も10桁数字を10字の「単語」に変換する規則を掲載している.次のような表を利用して2数字ごとに母音と子音を含む2英字に変換する.凡例では,ランダムに配された子音の最初の3文字を取ってGYX表と称されている.


孫文を支援した日本人,山田純三郎の同様の二つのコードコンデンサーを別稿で紹介した.

もはやコード語が本物の単語である必要はないので,子音‐母音の順を母音‐子音の順に変えたものは漢字コードを表わすものとしている.漢字を4桁数字で表わすコードはすでにあったので(別稿参照),8文字コードで漢字2字を,あるいは10文字コード2語で漢字5字を表わすことができる.


同じような2桁ごとに子音+母音の2字に変換する表は中川(1916)p.733にも掲載されているが,やはり「単語らしく見える」ようにする工夫は言及されていない.子音・母音を適宜入れ換えて単語らしく見せかける必要もなくなったので,むしろ子音+母音か母音+子音の別を使ってエラーチェックをすることも提案されている (中川, Acme).これは現代でいう情報埋め込みとかデジタル透かしといったものに相当する発想といえる.

コード・コンデンサー

上記のWestinghouseの表はCode Condenserと称されている.実はこれは数字を介することによって二つのコード語を一語に凝縮して電信料金を半分にするためのものだった.後年の5字コードを見慣れていると二つのコード語をつなげて10字の1語にするのは自明のことのように思えるが,当時のコード語はKabache, Kabakos, ... など不定字数の「単語」だったので,これを1語にするには特別な工夫が必要だったのである.具体的には,各コード語には5桁の数字が付与されているので,2つ合わせて10桁とし,それをCode Condenserの表によって英字10字のコードにすれば,1語として送信できるのである.

下記で紹介するCosmos Code CondenserやAmerican Condenserもそのようなコード・コンデンサーである.筆者は書名しか見たことがないがPieron's Code Condenser, 50% Economy without changing Codesも同様のものだろう.

ほかに次のような書名が見られる.

Premier Code Condenser (1907) by William H. Hawke

"Two-in-one" code condenser : a standard system for rapidly coding two code phrases in one word with perfect safety... : for use with general or private codes in English, French, German, Dutch, Spanish, Portuguese, Italian, or other language : indispensable to bankers... &c. (1910)

Composite code condenser. 12 figures in 10 letters or 11 figures in 9 letters (1919) by William George Gerlach

The Wallaby Code Condenser (1921, Melbourne) by W. E. Rockingham

米国特許第901,957号(Matthew Bain Dickie, 1908)

Google)回転円板を使って6桁数字(0〜199999)を英字5字に変換することによって2つの英字コードを英字10字で表わせるcode condenserが米国で特許されている.変換の内容は第5〜6桁を英字2字に,第3〜4桁を英字2字に,第1〜2桁(0-19)を英字1字に対応付ける3つの環を回すことによるものである.

The Acme code condenser (14 figure cyper code) (1911, Kobe) by Hanso Tarao

著者・多羅尾範三(京都在住)は1913年に下記の13桁数字暗号を発表したAlfred H. Taraoと同一人物.

"14 figure"と銘打ってはいるが,上7桁・下7桁の上限がそれぞれ1249999であり,たとえば下7桁が1250000以上の14桁数字は変換できない.メインタイトルに「コード・コンデンサー」とあるように,1250000個までの連番が付された任意のコードブックの二つのコード語を1つの10字コードで表わすためのものである(このような「コンデンサー」で10桁までのものはBentleyの900 Million Edition (2999929999まで)などすでにいろいろあった).

Acmeといえば後年のA.C.Meisenbachによるコードブックが有名だが,これは「絶頂,最高傑作」のような意味のギリシア語由来の単語で,他にもM'Kay's 'Acme' Stock Exchange Signal Code (1886, Dublin)などのタイトルで使われていた.

基本的には7桁数字の上4桁0000〜1249を英字2字に,下3桁000〜999を英字2字に変換するのだが,与えられている表を見ると000〜249しかない.実は上4桁,下3桁とも250で割った余りのみを表にしたがって英字2字に変換する.つまり,上4桁ならば000, 250, 500, 750, 1000のいずれかを,下3桁ならば000, 250, 500, 750のいずれかを引いた値を表わしていることになるが,何を引いたかの組み合わせ(5×4=20通り)を英字1字(5字コードの第3字とする)で表わし,これをインデックスと称している.

12670
1+2+6+7+0=16→(1位をチェック数字)6
126706 →   126       706
         (000+126) (500+206)
              LO        VU     →LODVU
         (000と500から)インデックスD

復号の際には,5字コードの最初の2字と最後の2字からそれぞれ000〜249の数字を復元し,インデックスを使ってそれぞれに何を足せばいいかを判別することになる.

著者は特徴として,(1) JとYを母音として扱っていること.(2)インデックスの使用.(3)インデックスの割り当てを変更することで秘密のコードにできること.(4)14桁への対応を挙げている.

Cosmos Code Condenser, A 13 Figure Code, by which two words of any code book, which contains up to 280000 words, are condensed into a combination of 10 letters of alphabet, which is pronounceable (1913, Kobe) invented by Alfred H. Tarao

この著者は上記の多羅尾範三と同一人物.

これは13 Figure Codeと銘打ってはいるが,279999279999までの数字(前半・後半がそれぞれ279999までという意味)を10字の英字コードで表わすことによって,280000個までの連番が付された任意のコードブックの二つのコード語を1つの10字コードで表わす(「コンデンサー」)ためのものである.そのために使う「インデックス」は著者は自分の発明だとしている.

前半と後半の6桁はそれぞれ,上4桁と下2桁に分解され,上4桁はTable Aによって英字2字に変換し,下2桁はTable Bによって英字2字に変換する.ただし,上4桁のほうは700で割った余り(000-699)のみを考慮する.これで前半から第一群,第二群,後半から第四群,第五群の英字2字対が決まる.そして前半・後半の上4桁で余りを取ることによって無視されたのが000, 700, 1400, 2100のいずれであるかの組み合わせにさらにチェック数字(全桁の和の一の位)を加味することによってTable Cから英字2字の第三群が決まる.

   (チェック数字:9+9+9+9+9+3+3+3+3+3=60 → 0)
99999 33333 →    999   99    333  33
              (700+299)    (000+333)
                    je  nn     ku  rz → jennerkurz
            (700と000とチェック数字0から)    er

10桁までの数字変換表

1904年の出版物(Whitelaw他)

1904年施行の規則改定に対するコード作成者の反応は早かった.数字変換に限っても1904年の段階で早くもいくつかのコードが出版されている.

WhitelawのTelegraph Cyphers, Pentasyllabic words representing two series of 10-figure groups from 0,000,000,000 to 9,999,999,999 [1904]はおそらく上記のWestinghouseのように10桁の数字を子音+母音からなる音節5つ(「5音節」)で表わして10文字の語に変換するものだと思われる.

同じ1904年には

7桁:The Economical Telegram Code Vocabulary of 10,000,000 inconvertible cipher words, each of ten letters, numbered consecutively from 0000000 to 9999999. With terminational order (Bombay)

8桁:Beith's 10-Letter Combinations (8 Figures) (Manchester),

9桁:McNicol's Nine Figure Code, or 1,100 Millions Pronounceable Words (Manchester),

といったものも出版されており,書名からすると同様のものと思われる.

Practical Examples for Compiling a Private Code, in conjunction with Any 10 or 12 Figure Cypher Code (1912) by Kotaro Ueta

本書でいうprivate codeまたはprivate commercial telegraphic codeは本稿でいうところのエンコード表である.数字としてエンコードした情報を英字コードに直すために,"10 figure table"が与えられている(ただし,書名にもあるように任意の10桁または12桁の数字変換表を使用可).

その表は00-99を2通りの英字2字に変換する2列を含む.まず10桁数字を5対の数字に分け,10個の数字の和を別の"Control or Check Table"で調べて対応する5文字(たとえばABBAA)を決定する(和は0〜90だが,表は92まである).この5文字が5対の数字を2字に変換する列を指定する.

              7+4+6+2+2+7+3+8+1+2=42→(control tableにより)ABBAA
7462273812 → 74 62 27 38 12 → (ABBAAに対応する列を参照) ot ri hi ey ar

Mosse Condenser (1922)

Rudolf-Mosse Code (1922)の付録のMosse Condenserは10桁数字を10字の英字コードに変換する.

まず10桁数字を5対の数字に分け,5つの2桁数字の和をcontrol tableで調べて対応する5文字(たとえばBBBAA)を決定する.この5文字が5対の数字を2字に変換する列を指定する.

              74+62+27+38+12=213→(control tableにより)BBBAA
7462273812 → 74 62 27 38 12 → (BBBAAに対応する列を参照) tu ri hi ey ar

The Acme Ten-Figure Code (1923) by A. C. Meisenbach

Acme Commodity and Phrase Code (1923)の付録.上記のWestinghouseと同様の2桁数字を英字2字に変換する表である.

2166527010 → 21 66 52 70 10
             ga sa in te da → gasainteda

Saraswatti Cypher Table (10 Figure Code) (1926)

神戸の香川商店による"1926 Supplement" to K. Kagawa & Co's Special Code (1926)の付録.上記のWestinghouseと同様の2桁数字を英字2字に変換する表である(母音はA, E, I, O, Uの5つのみ).さらに"3 Figure Phrase Combination Table"として3桁数字を利用してさまざまな情報をエンコードする表が収録されている.

12桁数字暗号

10桁の数字を10字の英字コードで表わすのはそれほど難しくない.だが10桁どころか12桁以上の数字を英字10字にするものもある.そのような変換表では複数のセクションからなる表を使うものが多い.一部の桁の情報は「どのセクションを使ったか」で表わすことがポイントとなっている.

Vollers' 12-Figure System (1906)

本書は本質的には6桁数字の上3桁を英字2字に,下3桁を英字3字に対応させることにより5字英字コードに変換する.

本書では6桁のうち第1・第2桁の00-99は左端にある列を見て2文字に変換する.第3・4桁の00-99および第5・第6桁の00-99はそれぞれ数ページにわたる表の行・列のインデックスとして使って,3文字パターンを決定する.

The eureka, 12 figure cypher code (Yokohama, 1908) by Ernest Kendall

これは6桁数字の上2桁を英字2字(Prefix)に,下4桁を英字3字(Root)に変換する.各ページはかなりの部分が同じ表が繰り返されているが,そのおかげで一つの半語の変換のために参照するのは一ページだけですむようになっている.

表の上部には00〜99に英字2字(Prefix)を対応させる表が繰り返し載っている.表の下部は残る4桁数字を英字3字(Root)に変換する表である.使うには,まずRootの上2桁(6桁数字の第3・4桁)に着目するのがいいと思う.ページの中ほど,Rootの表の上部には00, 01, 02, 03, ... とあるので,まずここを見て必要なブロックが載っているページを開く.次いでそのブロックの上にあるPrefixの表を見て第1・2桁に対応する英字2字を決める.各ブロックは4列に分かれているので,そのブロック内のPrefixがみつかったのと同じ列を見て,Rootの表から下4桁に対応する英字を決める.

たとえば750104をコード語に変換する場合,まず第3・4桁の01が記されているブロック(p.1)をみつけ,75に対応する英字2字をページ上部のPrefixのブロックでさがす.このページ上部には00〜99までの表(2通りが交互に割り当てられている)が毎ブロックに繰り返し掲載されている.75に対してもブロックによってafまたはakが該当するが,01ブロックについてはakである.そして01ブロック内の75=akがある列内でページ下部の表(00-99に対する英字3字パターンが割り当てられている)を見て04=apeを知る.

750104 → 01でブロック指定,ブロック内で75→ak,その列内で04=ape

なお,本書と同じかもしれないKendall's 12 figure Cypher Code. In strict accordance with the requirements of the London Conference of June-July, 1903, etc. (Lieber Code Co., New York, London, 1908, 35pp.)や,本書と同年のThe "Cheepandi" 12 Figure Cypher Code (1909, New York),本書の桁数を増やしたバージョンらしいEureka Cipher Code, 13 figures (1919, New York, 69pp.)(これはCatalog of Copyright Entriesにある)というものもWorldCatなどに挙げられている.

また,Oliver S. Kendallという別人によるThe "International" 12 Figure Cipher Code, Being Composed of a Million Million Artificial Words as Sanctioned by the Telegraphic Conference Held at Lisbon, 1909, Together with a Special Check System for the Correction of Mutilations (1910, 35pp.)などがGoogleで挙げられている.この著者もいろいろなコードを出しているようだが,14桁数字暗号を下記で紹介する.

Kendall's 12/13 figure cypher code, part I and II complete, 0000000000000/1999999999999, in strict accordance with the requirements of the Telegraphic Conference (1910) by Ernest Kendall

扉ページには版元が"Lieber Code Co., New York-London"とあるが,奥付では発行はジャパンガゼット新聞社(住所は横浜)となっている.また,奥付では著者「ケンダル」の住所は横浜となっているが,扉ページでの連絡先は神戸の私書箱になっている.

これは本質的には,6桁数字を5字コードに変換することによる12桁数字変換表といえる.タイトルに謳う「13桁」は,そのような表をPart I(0で始まる13桁数字用)とPart II(1で始まる13桁数字用)の2組用意することで実現している.13桁まで必要ないというユーザーのために,Part Iだけも別途半額で発売された.

本質的には,6桁数字は,縦軸の第1〜2桁の数字00-99と横軸の第3〜4桁の数字00-99を英字3字に変換する(複数ページにまたがる)表と,第5〜6桁に対応する2字を求める表によって,英字5字に変換される.Part Iでは,「プレフィックス」(前半6桁に対応)および「サフィックス」(後半6桁に対応)のいずれも同じ表を使うが,Part IIではプレフィックスとサフィックスに別の表が用意されている.

扉ページは,任意の5ないし6数字暗号を1語で送信できることを謳っている.つまり,コード・コンデンサーとして意図されているのである.

例として,13桁数字の最初の2桁をコードブックを指定する指示符とし,第3〜7桁,第8〜12桁を指定されたコードブックの二つのコードを指すものとし,第13桁をチェック数字とすることを提案している.例示されている指示符は:00(次の10桁はWester UnionまたはABCコードの5桁数字として解釈),01(Western UnionまたはABCの6桁数字の先頭の1を無視したもの),02(Western UnionまたはABCの5桁数字と6桁数字),03(Western UnionまたはABCの6桁数字と5桁数字),04(LiebersまたはA1コード),05(LiebersまたはA1とWestern UnionまたはABC),06(LiebersまたはA1とWestern UnionまたはABCの6桁数字)というものである.

表中の英字はでたらめに並べてあるわけではなく,混同されそうな文字は大きく異なる数字に割り当てられるよう配慮されているという(たとえばab:00とad:50).

Whitelaw's 1 to 12-Figure Groups 0/9 to 000,000,000,000/999,999,999,999 in 10-Letter Pronounceable Cypher (1910)

本書は本質的には6桁数字の上3桁を英字2字に,下3桁を英字3字に対応させることにより5字英字コードに変換する.上3桁は各ページの上段の表を見ていって対応する箇所にある英字2字を求める.その同じページの下段の表を参照して下3桁に対応する英字3字を求める.

筆者も中身は見ていないが,おそらく上段の表は000〜999の数字に対応する英字2字を10ページに分けて示すものだろう.2文字の組み合わせでは676通りしかできず000〜999の数字と一対一に対応することはできないので,同じ2字の組み合わせが異なるページに出現するケースもあるはずである.下段の表は各ページでみな同じ3数字を含むが,全ページを通じて同じ3文字の組み合わせは含まないようになっているのだろう.(だから仮に最初の2文字が同じになったとしても,5字コード全体としては同じになることはない.)

13桁数字暗号

Ideal Code Condenser (1909) by Kölkenbeck

Googleによればタイトルをフルに書くとThe Ideal Code Condenser: Being a Thirteen Figure Code (0,000,000,000,000 to 9,999,999,999,999) for the Purpose of Enabling a Number of Different Numbered Codes to be Employed in the Same Message at the Rate of Two Phrases to One Code Word, the Recipient Being at the Same Time Informed from which Code to Read Each Part of the Message, with Two-figure Safety Check Against Mutilations. With Full Instructions in English, French and Germanとなる.第2版がThe Dominionの1913年11月18日号で紹介されている.コードブックからの二つのコードを一語にするためのものだが,複数のコードブックを使ってもどのコードブックを使えばよいかをちゃんと復号側に伝えられるという.

The 13 Figure Cypher Code: inconvertible cypher words (each of ten letters) (1914) by Masazo Yamada

000 00000 00000から499 99999 99999までの13桁数字を10字の英字コードに変換できる(12/13桁数字を混用する場合は13桁数字の第1桁0, 1, 2, 3, 4の代わりに(なし), 0, 1, 2, 3とする).00-99を英字2字に変換する表が5通り(Section A-E)与えられており,第1桁に応じてTable Iを参照して第2〜3桁を英字2字にするSectionを選択し,第4桁に応じてTable IIを参照して第5〜6桁,第7〜8桁を英字2字にするSectionを選択し,第9桁に応じてTable IIを参照して第10〜11桁,第12〜13桁を英字2字にするSectionを選択する.

発音可能要件を満たすため,Section Aは母音+子音,Section Bは子音+母音としており,第2〜3字,第10〜11字はAかBなのでできあがった10字コードは少なくとも二つは母音を含むことになるが,Section C, D, Eは子音+子音であり,かなり苦しい綴りも発生する(下記ではあえてそのような例を選んだ).

2117201140454 → 2 11 | 7 20 11 | 4 04 54
        Section:    C      B  C      A  E
                   bs     be bs     ag vg → bsbebsagvg

"Acme Safety First" Thirteen Figure Code (1923) by A. C. Meisenbach

Acme Commodity and Phrase Code (1923)の付録.これは12桁+チェック数字による13桁数字を英字10字に変換するものだが,最初の3桁は最大129という制約がある.まず最初の3桁に対応する5桁数字を見出す,この5桁数字の各桁(1〜4のいずれか)は,後続の10桁=5対の数字を変換するために使う表を指定する.各表は00-99をそれぞれ英字2字に変換する表となっている.第1表は子音+母音,第2表は母音+子音,第3表は子音(B-M)+子音(N-Z),第4表は子音(N-Z)+子音(B-M)となっているので,受信側では受け取った英字コードの各対の文字をどの表で数字に戻せばいいかがわかる.

なお,最初の3桁について,1〜4の組み合わせをフルに使えば45=1024通りの組み合わせが可能なので129までに制限する必要はないはずだが,当時の国際電信規則ではコード語が「発音可能」でなければならないという条件があったので,子音+子音の組み合わせである「3」「4」が連続せず,先頭にもこないとか,241, 231という並びは子音が4つ連続することになるので避けるといった制限をつけたようだ.(Qを使っていないのも「発音可能」のためだろう.)それでもたとえば126なら24212なのでudxbubcuahなどの奇怪な文字列が生じるのだが,この時期「発音可能」はかなりゆるく解釈されていて,適度に母音がはさまれていれば認められていたようだ.

1283596217150 → 128 35 96 21 71 50
  (128より)indicator: 2  4  2  2  1
                     ak wm eg et na → akwmegetna

いろいろな12〜13桁数字変換表

中川静(編)『信書精鑒』(大正5年)(1916)(近代デジタルライブラリー)p.735付近は,12桁以上の数字変換表で当時神戸で使われていたものとして下記ものを挙げている.

Kendall's 12 Figure Cypher Code

Voller's 12 Figure System

Non Plus Ultra Cypher Code (12 Figures)

Kerr's 13 Figures Code

Schofield's 13 Figure Condenser

Yamada's 13 Figure Cypher Code

ただし,13桁のものについては,第1桁が9まで完全に自由な値を取れるわけではなく,時にできたコード語が発音可能でなくなるため,1916年の時点で「いまだあまねく実用に供せらるるに至らず」としている.

米国の1916年のCatalogue of Copyright Entries (Google)にはSchofield's 13-Figure Telegraph Code (2nd ed., 2枚)が登録されている.

Oriental Self-checking Three-Letter Code (1st ed. 1930, 2nd ed. 1931, Kobe, Japan) by K. Yamaguchi

このコードブックのコード語は英字3字で,コード語3つにチェック文字1つを付加して10文字のコード語として送信することを想定している.第2版では,これを13桁の数字暗号として使うことを提案している.各コード語には4桁数字が付されているので,それを利用して12桁数字を3つの4桁数字に分けてそれぞれ3文字のコード語に変換するのである.(13桁目の数字はチェック用.)

1930年代には「発音可能」の要件が緩和されたので,英字3字の任意の順列を使用できるようになったのである.

14桁数字暗号

コードのパターンを制約していた「発音可能」の要件は1928年の国際電信規則改正で緩和され,1934年から施行となった改正では撤廃された.これにより,14桁の数字変換も可能になった

英字5字(265=約1188万≒107通りのパターンを表現可能)で7桁までの数を表現できることを考えると,英字10字なら14桁も表わせることになる.

The American Condenser: The Only 14-figure Code in Existence : Suitable for All Users of the Western Union Code, A B C Code, A1 Code, Broomhall's Code, Lieber's Code, Etc., Etc. (1906)

驚いたことに1906年の段階ですでに14桁数字暗号らしきものが発売されている.書名の「Condenser」からすると,列挙されているコードブック(まだ5字より長い本物の「単語」らしいコード語を使っている)の2つ〜3つのコード語を14桁数字を介して英字10字で表現するものだろう.

Kendall's 14 Figure Cypher Code (London, 1923) by Oliver S. Kendall

7,14桁目または14桁目のみをチェック数字に使うものとしており,後者の場合,最初の13桁(7桁目を除く)の数字の合計を5で割った余りをチェック数字とする.いずれにせよ,7,14桁目は特別な扱いを受ける.

これもRudol-Mosseのcontrol tableのようなものを使うらしく,第1,2桁によって第3,4桁,第5,6桁,第8,9桁を変換すべき列を決定し,第7,14桁によって第10,11桁,第12,13桁を変換すべき列を決定する.第1,2桁,第7,14桁の情報は,他の桁の変換に「どの表を使ったか」の形で保存されている.

0+3+9+4+1+6 + 7+3+8+1+4+9=55; 55 mod 5=0 → チェック数字(第14桁)

0394162738149 → 03 94 16 2 73 81 49 0 → mu xe ki ky ru
    (使用する列)     2  2    2  7  2

ただし,桁数が多ければいいというわけではなく,一般論としては,桁数が多いほど冗長性が低下するので,発音しにくい奇怪な綴りが現われやすくなる一方,誤り検出能力が低下する.このコードについては,馬場は(下記のYatomiのものとともに)「未だ十分にコンデンスの作用が行われない恨がある,即ち数字の半分以下が完全に開けて居らぬ,依って其を一挙に展開せしむるものがAcme (A.C. Meisenbach)の十三位数字暗号で,此はKendallやYatomiよりも進歩して居り其完備せるものである.」と評している(p.208).

Meisenbach's Fourteen Figure Code, Etc. (1929)
Meisenbach's Fourteen Workable Figure Code (1937, London)

著者Albertus Charles Meisenbachは上記のAcme Commodity and Phrase Code (1923) で13桁数字変換表を公表しており,1928年の規制緩和を受けて早速14桁版を発表したらしく,1937年にもその改訂版らしきものを刊行している.

Imoto's Standard 14 Figure Cipher Code (Kobe, 1929) by T. Imoto

本書(といっても10ページ余りの冊子だが)は1928年の国際電信規則改定に則っているとうたっている.これは14桁を上4桁と下10桁に分けて変換する.上4桁は1499までとしているが,2610=約1.4×1014(15桁)なので,まだ少し余裕がある.(ただし,14桁数字の末尾2桁は,5〜12桁を2桁ずつに区切った和(の下2桁)とされており,チェック数字として使うことが想定されている.)

まずIndicator Table(Rudolf-Mosse Codeのcontrol tableと同様)を参照して上4桁の0000〜1499に対応するindicator(5桁数字11111〜65122)を求める.indicatorの各桁は1〜6までの数のいずれかであり,それがCoding Tableの1〜6のうちどの列を見ればいいかを示す.indicatorの5桁の各数字が,下10桁を2数字ごとに分けた各ペアについてのCoding Tableの列を示す.Coding Tableの各列は,2桁数字を2字英字に変換するものとなっている.(送信される英字10字は下10桁に対応するものだが,どの表を使ったかによって上4桁の情報もエンコードされている.)

Coding Tableの1は母音−子音,2は子音−母音の組み合わせになっており,Indicator Tableの5桁数字が1または2を3つ以上含むようにすることによって,最終的な10字コードに最低3個の母音が含まれることが保証される.これは改正された電信規約のカテゴリーAの条件を満たす.

    56+78+90+12=236 → 36 (チェック数字)

123456789012 →     1234 56 78 90 12 36 → FQ DL AS OL UB →FQDLASOLUB
               indicator: 4  3  1  2  1

Imoto's Standard 5 Letter 8 Figure Cipher Code (Kobe, 1929) by T. Imoto

Imotoのもう一つの数字変換表をここで扱っておく.これも1928年の国際電信規則改定に則っているとうたっている.これは8桁数字(1799999まで+チェック数字)を上3桁と下4桁(+チェック数字)に分けて変換する.上3桁は179までとしているが,265=約1.188×107(8桁)なので,まだまだ余裕がある.

まずIndicator Tableを参照して上3桁の000〜179に対応するindicator(3桁数字111〜665)を求める.indicatorの各桁は1〜6までの数のいずれかであり,それがCoding Tableの1〜6のうちどの列を見ればいいかを示す.indicatorの3桁の各数字が,下4桁を2数字ごとに分けた各ペアについてのCoding Tableの列と,第8桁のチェック数字についての表を示す.Coding Tableの各列は,2桁数字を2字英字に変換するものとなっている.

X figure code : 5-letter 7 and 8 figure condenser (Kobe, 1936) by K. Sakai

酒井嘉七による英文コードで,1934年発効の国際電信規約に準拠しているとうたっている.任意の7桁数字または11,419,999までの8桁数字を5字英字に変換できるものだが,まず7桁数字の場合を説明する.

まず最初の2桁に相当する数字が赤で印刷されているセクションをみつける.その表は残り5桁数字のための"Key"と"Odd & Even Mark"が列挙されている.まず残った五桁数字の各桁が奇数(-)・偶数(=)のパターン(25=32通り)をOdd & Even Marksの欄で求め,それに対応する5桁のKeyを求める.次いでもとの数字(Figure)(10通り)とKey(1〜5の5通り)の組み合わせによりCoding Tableを参照して英字1字を決定する.(組み合わせは10×5=50通りあるのに英字はXを除いた25しかないので,もとの数字が1と2の場合は同じ英字,3と4の場合は同じ英字,などとなる.)このようにして,5桁数字が英字5桁になるのである.

12 34567 → (34567より)-=-=- (odd/even)
→ (12のセクションより)14145 (key) → (Coding Tableより)BQCRY

逆に,復号時には英字1字がわかればもとの数字(ただし偶数と奇数の2通りの候補が表に記されている)とKey数字の組み合わせがわかる.5桁のKeyがわかったら,それに対応するエントリーをKeyの列(5進法で記されている)から見つけ出し,その横に書かれている奇偶パターンによりもとの数字を奇偶を含めて確定する.また,そのエントリーが属するセクションの赤字から上2桁がわかる.

上記では最初の2桁に相当する数字を赤で印刷されているセクションでみつけたが,3桁に相当する部分が赤字でみつかることもある.その場合は残るのは奇偶パターンは4桁(24=16通り)となり,Keyは2桁目がxになっている.4つの数字は上記と同じようにして英字に対応させるが,2桁目はそのまま英字Xを対応させる.

さらに,最初の4桁に相当する数字が赤字でみつかることもある.これは8桁数字を5桁英字に変換する場合に使うもので,その場合,残り4桁は上記のようにXを含む5英字にする.

なお,7桁数字,8桁数字または14桁数字の末位を通例チェック数字とするとしている.

Graphical complete seven figure code in English, French, German, basing on figure combination system (1937.8, Kobe) by Kenji Shirai

白井健次による変換表で,7桁数字(7桁目は第1〜6桁の和の一の位を表わすチェック数字)を英字5字に変換する.

1.第1/2桁,第3/4桁,第5/6桁,第7桁に分ける

2.第1/2桁,第3/4桁,第5/6桁を使って,△(00-24),○(25-49),◎(50-74),□(75-99)の記号を付された4列からなる表を参照して,各2桁の00-99の数字をそれぞれ英字1字(A-Z;Qなし)に変換.これにより,英字3字と列を表わす3記号からなる列記号(△△△,△△○,……,□□□)が得られる.

3.行が列記号(△△△,△△○,……,□□□)を表わし,列が第7桁の0-9を表わす表を参照して,第7桁を英字2字に変換.

4.ステップ2の3字とステップ3の2字で5字の英字コードができる.

1234567 → 12 34 56 7
            M  J  G
       列:△ ○ ◎
    △○◎を使って→SL  →MJGSL

復号にはまず5字の英字コードを第1〜3字,第4〜5字に分ける

1.第4〜5字から第7桁の数字と列記号(△△△,△△○,……,□□□)を取得.

2.列記号(△,○,◎,□)と第1/2/3字からそれぞれ第1/2桁,第3/4桁,第5/6桁を取得.

Yatomi’s complete seven figure code, 0000000 to 9999999 (1937.10, Tokyo) by Genji Yatomi

矢富源次による変換表で,7桁数字を英字5字に変換する.実質的には上記Graphicalと同じ方式である.(チェックの方法は多数あるとしつつ,7桁目または14桁目をチェック数字とする方式を例示している.)

1.第1/2桁,第3/4桁,第5/6桁,第7桁に分ける

2.第1/2桁,第3/4桁,第5/6桁を使って,a(00-24),b(25-49),c(50-74),d(75-99)の記号を付された4列からなるColumn Tableを参照して,各2桁の00-99の数字をそれぞれ英字1字(A-Z;Qなし;列によって割り当てがずれている)に変換.これにより,英字3字と列を表わす3記号からなる列記号(aaa, aab, ……, ddd)が得られる.

3.行が列記号(aaa, aab, ……, ddd)を表わし,列が第7桁の0-9を表わすIndicator Tableを参照して,第7桁を英字2字に変換.

4.ステップ2の3字とステップ3の2字で5字の英字コードができる.

1234567 → 12 34 56 7
            M  P  S
       列: a b c
       abcを使って→JG  →MPSJG

復号にはまず5字の英字コードを第1〜3字,第4〜5字に分ける

1.第4〜5字からIndicator Tableにより第7桁の数字と列記号(aaa, aab, ……, ddd)を取得.

2.列記号(a, b, c, d)と第1/2/3字からそれぞれ第1/2桁,第3/4桁,第5/6桁を取得.

酒井の14桁数字変換表(1939)

酒井嘉七『外国電信係読本 : 附・実用二文字標準補助暗号書』(1939)は14桁数字変換表の二通りの方式を提案している.

第一の方法(p.65)は,7 FIGURE CONDENSERと称され,7桁数字を5字英字に変換するもので,次のような手順になる.これは実質的に上記Graphicalと同じ方式である(酒井はこれに先立ち上記のX figure codeを発表しているが,こちらのほうが実用的と判断したのだろう).

1.第1桁,第2/3桁,第4/5桁,第6/7桁に分ける

2.第2/3桁,第4/5桁,第6/7桁を使ってSecond Tableを参照→00-99の数字をそれぞれ1〜4(Section No.)+a-zに変換.

3.First Tableの行がSection Nos. 111-444(第2/3桁,第4/5桁,第6/7桁の情報を含む)を表わし,列が第1桁の0-9を表わす→AA-YPの2字に変換.

4.ステップ3の2字とステップ2の3字で5字の英字コードができる.

1234567 → 1 23 45 67
              x  u  r
    Section: 1  2  3
123を使って→cs   →csxur

復号は5字の英字コードを第1/2字,第3〜5字に分ける

1.第1/2字をFirst Tableでさがして第1桁の数字とSection Nos.を取得.

2.Section No.と第3〜5字からSecond Tableを参照してそれぞれ第2/3桁,第4/5桁,第6/7桁を取得.

酒井の記述する第二の方法(p.66)は0-11,881,375までの数字を5桁英字に変換できるというが,実質的には26進数の計算表である.

用語について

上記のような手順に関連して,数字暗号(figure code)とかコンデンサー(condenser)といった用語が使われるが,その意味するところは著者によって若干相違がある.

コンデンサー(condenser)

最も広義には,Rudolf-Mosseは(数字の場合に1語で送信可能な)5字より多くの桁をもつ数字を(コードの場合に1語で送信可能な)英字10字で表わすものを「コンデンサー」とした.

ただし,より一般には2つ(以上)の英字コードを10字の英字コード1語で表わすものをコンデンサーと称する例が多い.Friedman, Report on the history of the use of codes and code language (1928) p.23もこの意味で使っている.code condenserという形ならこの意味だと思っていいだろう.

一方,阿部ワ『外国貿易商用暗号入門』(1949)p.24は「コンデンサー」は11桁以上の数字を英字10字に表わす数字変換表の意味で使っている(10桁の数字を英字10字に変換するものも「コンデンサー」に入れているものの,本来はその名に値しないとしている).酒井も数字をその桁数より少ない英字で表わす数字変換表の意味でcondenserを使っている.この意味の場合はfigure condenserといえば誤解はないだろう.

数字暗号(figure code)

「数字暗号(figure code)」の語は,数字の各桁に意味をもたせるエンコードの部分を意味すること,数字を英字コードに変換する部分を意味すること,両者合わせた過程を意味することがあるようだが,一方のみを指している場合でも,他方が当然の前提となっているようだ.(なお,電信コードを離れて一般に「数字暗号」といえば「語句を数字で表わす暗号」を指すのが普通で,数字を英字コードに変換するのとは逆になっている.)

酒井嘉七『外国電信係読本』(1939)(p.61以下)ではエンコードの部分を「数字暗号書」,変換の部分を「数字変換表」と称し,後者にCondenserまたはConverterの英語を宛てている.

馬場誠「貿易技術としての電信暗号」(『商業と経済 : 長崎高等商業学校研究館年報. 第20年 第1冊』(1940)所収)(近代デジタルライブラリー)p.202も,「数字暗号」は「七位・十位・十三位等の数字を使用して各位の数字に特定の用件を表わさせることにする」(つまりエンコードのほうを指す)としつつ,「文字の形式に変化する様にせねばならぬ」としている.

このほかにエンコードを指して使った例として,山口造酒,白井健次『英文商業通信寶鑑 附十三数字組立暗号電報』(1922)の第XL章をなす別冊付録は「13 FIGURE CODE 十三数字組立暗号電報」と称されているが,内容は数字の各桁によるエンコードである.平子祐次郎のHirako's 13 figure code (1928)もエンコードを扱ったものである(説明はないが英字コードへの変換は当然視されている).

一方,桁数を冠したthirteen figure codeのような形では数字変換表を指すことも多い(上記で挙げた書名を参照).

British Books in Print for 1888 にはFIGURE CODESという項目がある.ここではその特徴の一つとして「In one word, an Order (or Offer) for any article, with Price, Quality, Shipment, and mode of Transit, can be transmitted.」とあるのでエンコードの部分を指しているが,実際に挙げられている3つのコードブックはその宣伝文句からするといずれも数字を英字コードに直すもののように見受けられる

Bentleyの電信コードについての解説(Codes: Their Nature and Manipulation)ではfigure codeはエンコードと数字変換を合わせたものを指している.

Acme p.900には三つの意味でfigure codeを使いつつ,誤解のない表現となっている例文があるので紹介しておく.すなわち,"thirteen figure code"の表現では数字変換部を指しつつ,同時にエンコード部をprivate figure codeと称している.その直後に現われるfigure codesは両者の総合と見るべきだろう.

This thirteen figure code has been incorporated to accommodate practically any private figure code and may be used in conjunction with the Acme Code by those who are familiar with the operation of figure codes.


文献

本稿で言及している個々のコードブックや参考文献については別稿(英文)参照.



©2014 S.Tomokiyo
First posted on 27 August 2014. Last modified on 5 March 2020.
Articles on Historical Cryptography
inserted by FC2 system