スパゲティソースとは、イタリア料理であるスパゲッティにかけるソース……げふんげふんではなく、コンピュータのプログラミングに使われる公開鍵暗号の一種である。従来の暗号とは違い、解読の物理的な困難さよりも精神的な困難さを追求した技術なので、解読者を参らせることができるため、画期的だと言われている。なお、ここで言う鍵は、一般的な暗号化における鍵の意味とは違い、抽象的かつ広義で定義されるものである。
目次
1 概要
2 暗号方式
2.1 鍵生成
2.2 暗号化
2.3 解読
2.4 書出
2.5 完全性の証明
3 安全性
3.1 スパゲティソース暗号と鍵生成の問題
3.2 鍵の問題
4 この暗号の応用
4.1 EC暗号
4.2 MN法
4.3 一字変数法
4.4 後藤式暗号
4.5 BrainFuck、WhiteSpace、Whirl
5 関連項目
概要
実は暗号が作られた発端は非常に曖昧で、自然発生的なものだと言われている。国家機密情報を扱うときに、「情報を物理的な暗号化するだけでは生ぬるい」と判断した米国国防総省は、情報を何重にもわたって暗号化することを考えた。その一番中の入れ子となる暗号化として、「人間を精神的に参らせる方法」を考えた。その結果生まれたのがこの暗号である。
スパゲティソース暗号は次のような方式である:鍵(秘密鍵)を探しだして、ソースを書かせる。この鍵は、決して強力なものであってはならず、適度に独自性を持っていて、かつ誤差やゆらぎを含むものが望ましい。スパゲティソースの鍵は、自律的にソースを製作してくれるが、鍵の質によっては途中で停止したり、消失してしまうこともあるので、鍵選びは慎重に行う必要がある。ここで、うまく上記条件を満たす鍵であれば、見事に暗号化がなされ、ぱっと見どういう結果が起こるのかわからない文書が作成される。こうして吐き出された文書は、鍵を用いずに暗号文から平文を得ることは難しい、と信じられている。これがスパゲティソース暗号の安全性の根拠である。しかし、この暗号方式が中小企業での使用に留まりがちなのは、書出という最後のプロセスに公開鍵を使用するという非常に変わった暗号(しかも、鍵ペアはたいていの場合、同時には生成されない)であるゆえに、大会社はもとより採用を躊躇し、中小企業においても最後のプロセスに行き着かないというトラブルが起きているからだと思われる。
暗号方式
鍵生成、暗号化、解読、書出の4つのアルゴリズムで定義される。
鍵生成
p を鍵となるべきもの自身とする。
鍵を探すものa、b、cはpに当てはまるものを列挙されたものから総当りで発見する(場合によってはa、b、cを使わずにアルゴリズムから発見することもある)。pが条件を満たすとき、初めてpは定数となり、鍵として認められる。
暗号化
pは自律的に平文から暗号文を生成する。暗号化のアルゴリズムは鍵によって大きく異なる。このとき、複数の鍵を使用すると暗号の生成速度は上がるが、暗号としての安全性は下がってしまう。これは、鍵を一つでも入手すれば容易に復号できるおそれがあることと、鍵同士が干渉して独自性や誤差やゆらぎが充分に発生しないおそれがあることが主な理由である。
解読
pは自律的に解読作業を行う。pが複数ある場合も、そのうち一つが存在すれば複合化は可能だが、極端にペースが落ちたり、エラーを生じる恐れもある。なお、このプロセスは書出のプロセスとほぼ同時に行われる。
書出
書出のプロセスにおいてのみ、公開鍵qが使用される。この公開鍵は普遍的な特性を持つことが要求され、探し出して手に入れるまでのプロセスや、漏洩を防ぐことなど、さまざまなシーンで費用がかさむため、常にこのアルゴリズムを完了できる状態にしておくのは非常に難しいとされている。費用を捻出できない企業は、たいていこのプロセスに複数の会社で共有された鍵を使用する。共有のものであっても、公開鍵が情報漏洩の元となるケースは極めて稀である。
完全性の証明
pが生成する独自性や誤差・ゆらぎをもつソースは、暗号を解読しようとするものに対して、精神的な苦痛を与える。質の悪いものであればちょっとした足止めにしかならないこともあるが、鍵によっては、汚いソースを読む苦しみによって解読者を発狂させるなどの呪いじみた効果を持つ暗号を生成する。また、解読に使ったPC自体に誤作動を起こさせたり、意図せぬ動作を引き起こさせるという強力なカモフラージュが施されているため、解読者も安易に機械による解読を行うことができない。また、うまく機械的に解読できたとしても、間違った平文に誤読されていることが多いため、非常に暗号化としての効力の強いものといえる。
安全性
スパゲティソース暗号と鍵生成の問題
スパゲティコード暗号は、使用する鍵によって、大きく暗号解読にかかる時間に差が出る上に、鍵が正しいことを確認する手段が無い。