スパゲティソース

出典: へっぽこ実験ウィキ『八百科事典(アンサイクロペディア)』
移動先: 案内検索

スパゲティソースとは、イタリア料理であるスパゲッティにかけるソース……げふんげふんではなく、コンピュータのプログラミングに使われる公開鍵暗号の一種である。従来の暗号とは違い、解読の物理的な困難さよりも精神的な困難さを追求した技術なので、解読者を参らせることができるため、画期的だと言われている。なお、ここで言うは、一般的な暗号化におけるの意味とは違い、抽象的かつ広義で定義されるものである。

概要[編集]

実は暗号が作られた発端は非常に曖昧で、自然発生的なものだと言われている。国家機密情報を扱うときに、「情報を物理的な暗号化するだけでは生ぬるい」と判断した米国国防総省は、情報を何重にもわたって暗号化することを考えた。その一番中の入れ子となる暗号化として、「人間を精神的に参らせる方法」を考えた。その結果生まれたのがこの暗号である。

スパゲティソース暗号は次のような方式である: 鍵(秘密鍵)を探しだして、ソースを書かせる。このは、決して強力なものであってはならず、適度に独自性を持っていて、かつ誤差やゆらぎを含むものが望ましい。スパゲティソースの鍵は、自律的にソースを製作してくれるが、鍵の質によっては途中で停止したり、消失してしまうこともあるので、鍵選びは慎重に行う必要がある。 ここで、うまく上記条件を満たす鍵であれば、見事に暗号化がなされ、ぱっと見どういう結果が起こるのかわからない文書が作成される。こうして吐き出された文書は、鍵を用いずに暗号文から平文を得ることは難しい、と信じられている。これがスパゲティソース暗号の安全性の根拠である。 しかし、この暗号方式が中小企業での使用に留まりがちなのは、書出という最後のプロセスに公開鍵を使用するという非常に変わった暗号(しかも、鍵ペアはたいていの場合、同時には生成されない)であるゆえに、大会社はもとより採用を躊躇し、中小企業においても最後のプロセスに行き着かないというトラブルが起きているからだと思われる。

暗号方式[編集]

鍵生成、暗号化、解読、書出の4つのアルゴリズムで定義される。

鍵生成[編集]

p を鍵となるべきもの自身とする。

鍵を探すものabcpに当てはまるものを列挙されたものから総当りで発見する(場合によってはabcを使わずにアルゴリズムから発見することもある)。 pが条件を満たすとき、初めてp定数となり、として認められる。

暗号化[編集]

pは自律的に平文から暗号文を生成する。暗号化のアルゴリズムは鍵によって大きく異なる。このとき、複数の鍵を使用すると暗号の生成速度は上がるが、暗号としての安全性は下がってしまう。これは、鍵を一つでも入手すれば容易に復号できるおそれがあることと、鍵同士が干渉して独自性誤差やゆらぎが充分に発生しないおそれがあることが主な理由である。

解読[編集]

pは自律的に解読作業を行う。pが複数ある場合も、そのうち一つが存在すれば複合化は可能だが、極端にペースが落ちたり、エラーを生じる恐れもある。なお、このプロセスは書出のプロセスとほぼ同時に行われる。

書出[編集]

書出のプロセスにおいてのみ、公開鍵qが使用される。この公開鍵は普遍的な特性を持つことが要求され、探し出して手に入れるまでのプロセスや、漏洩を防ぐことなど、さまざまなシーンで費用がかさむため、常にこのアルゴリズムを完了できる状態にしておくのは非常に難しいとされている。費用を捻出できない企業は、たいていこのプロセスに複数の会社で共有された鍵を使用する。共有のものであっても、公開鍵が情報漏洩の元となるケースは極めて稀である。

完全性の証明[編集]

pが生成する独自性や誤差・ゆらぎをもつソースは、暗号を解読しようとするものに対して、精神的な苦痛を与える。質の悪いものであればちょっとした足止めにしかならないこともあるが、鍵によっては、汚いソースを読む苦しみによって解読者を発狂させるなどの呪いじみた効果を持つ暗号を生成する。また、解読に使ったPC自体に誤作動を起こさせたり、意図せぬ動作を引き起こさせるという強力なカモフラージュが施されているため、解読者も安易に機械による解読を行うことができない。 また、うまく機械的に解読できたとしても、間違った平文に誤読されていることが多いため、非常に暗号化としての効力の強いものといえる。

安全性[編集]

スパゲティソース暗号と鍵生成の問題[編集]

スパゲティコード暗号は、使用する鍵によって、大きく暗号解読にかかる時間に差が出る上に、鍵が正しいことを確認する手段が無い。つまり、間違った鍵でも解読は行われてしまうし、間違った公開鍵でも書出は行われる。間違った平文になってしまうだけでプロセス自体はそのまま行われてしまうため、鍵が正しいのか、解読されて出てきた平文は暗号化前のものと同じなのか、それらを確認する術が無い。正しい鍵を確実に使うしかない。

鍵の問題[編集]

公開鍵を一つ確保しておけば、スパゲティソースのほとんど全てを書出してくれることだろう。 だが、問題は秘密鍵にある。この秘密鍵があると、周辺の文書全てを暗号化させてしまうという誤作動を起こすことがある。そのため、重要な文書は鍵の有効圏外に置く必要があり、暗号化したくないものには鍵が干渉しないようにせねばならない。

この暗号の応用[編集]

EC暗号[編集]

English Comment Codeの略である。日本人は基本的に英語が苦手なため、英語が使える人は、この暗号を使うことでライバル企業に情報が漏洩することを防ぐことができる。また、周りに英語が使える人がいないにもかかわらずコメントを英語化することで、プロジェクトの進行を妨げると同時に海外にリークしやすくするという潜入スパイ活動を目的として使われることもある。この暗号を使いすぎると、精神病患者として扱われる恐れがある。

MN法[編集]

Magic Numberの略。スパゲティソースに直接数字を埋め込む事で、解読や改竄を防ぐ効果がアップする、まさに魔法の数字である。もし途中で数字を変更する必要が発生しても、基本的に検索、置換が行えず、一つ一つ血眼で探す必要がある。定数にしておけば良かった・・・と思っても手遅れである。

一字変数法[編集]

ijk法とも呼ばれる。一時的に一字的な名前の変数を用いて、解読性を下げる事が出来る。また、類似の手法にhoge法、foobar法なども存在する。

後藤式暗号[編集]

GOTOという文字をソースに多用する特殊な暗号。以前はスパゲッティソースの主流であったが、構造化プログラミングが主流になるにつれて下火になりつつある。

BrainFuck、WhiteSpace、Whirl[編集]

「読みにくいってレベルじゃねーぞ!」
BrainFuck について、モノウ・ルッテレ・ベルジャネーゾ

理論的にはどんなプログラムでもこれらの暗号に書き換えられる(らしい)。全てのソースの可読性が殺人的に低下し、解読はほぼ100%不可能になるが、鍵がエラーを起こして暗号化を諦める事態が頻発し、今のところこれらの暗号を使用している企業は日本には存在しない。

甘いスパゲティ[編集]

ほとんどの言語には糖衣構文といわれる物が存在するが,コレを用いれば甘いスパゲティが作れるのではと噂されている。決してどこかの喫茶ではない。

関連項目[編集]