ソースコード=設計図?
制度は、中国で生産・販売する外国製の情報技術(IT)製品について、製品を制御するソフトウエアの設計図である「ソースコード」の開示をメーカーに強制するものだ。中国当局の職員が日本を訪れ製品をチェックする手続きも含まれる。拒否すれば、その製品の現地生産・販売や対中輸出ができなくなる。
どの先進国も採用していない異例の制度で、非接触ICカードやデジタル複写機、金融機関向けの現金自動預け払い機(ATM)システムなど、日本企業が得意な製品も幅広く開示対象になる可能性がある。
中国側は、ソフトの欠陥を狙ったコンピューターウイルスの侵入防止などを制度導入の目的に挙げる。しかし、ソースコードが分かればICカードやATMなどの暗号情報を解読するきっかけとなる。企業の損失につながるだけでなく、国家機密の漏洩(ろうえい)につながる可能性もあるため日米欧の政府が強く反発。日本の経済界も昨秋、中国側に強い懸念を伝えた。
中国、ITソースコード強制開示強行へ…国際問題化の懸念
さすが中国は強引だなあ、と思ったのだが、そういやソースコードって何だっけ?と考えてみた。
バイナリを生成するための情報がソースコードであるとして、その情報元(≒ソースコード)は紙に書いたアイディアみたいなものからほぼバイナリに近いものまで様々なレベルで存在する。例えばyaccで生成された.cは「元のソースコード」ではないわけだが広義にはソースコードだ。そしてその.cが、yaccから生成されたものなのか、あるいは手で書いたものなのかは、原理的には判別不能である。
何が言いたいかというとつまりアセンブリソースコードで渡したってよいだろうと。例えばLinuxで元々のソースが
main()
{
exit(0);
}
だとして、
main() { __asm__( "xor %eax,%eax\n\t" \ "xor %ebx,%ebx\n\t" \ "inc %eax\n\t" \ "int $0x80\n\t" ); }
という形で渡してもよいし、いっそのこと
main() { __asm__( ".byte 0x31,0xc0\n\t" // xor eax, eax ".byte 0x31,0xdb\n\t" // xor ebx, ebx ".byte 0x40\n\t" // inc eax ".byte 0xcd,0x80\n\t" // int 80h ); }
とバイナリで直接埋め込む手もある。これならコンパイラのバグなどにも悩まされなくて済む。
あるいは「うちのスタッフは全員バイナリアンで、uuencodeを直接タイプしています」と主張してみるとか。
begin 600 hello.com 7N@,!2$5,3$\L5T]23$2T"
こういう形なら例え暗号化・難読化後のバイナリからでも簡単に「ソースコード」が生成できるし、確実に元のバイナリが生成できるので、ある意味非常に品質の高いソースコードであると言える。
この方法はLSIにも使えそうである。例えばネットリストよこせとか言われた場合に、うちは最終的に写真で管理してます、とか言ってチップの写真を撮って渡すとか。
____________ ヾミ || || || || || || || ,l,,l,,l 川〃彡| V~~''-山┴''''""~ ヾニニ彡| 出す・・・・・・! / 二ー―''二 ヾニニ┤ 出すが・・・ <'-.,  ̄ ̄ _,,,..-‐、 〉ニニ| 可読性の /"''-ニ,‐l l`__ニ-‐'''""` /ニ二| 指定まではしていない | ===、! `=====、 l =lべ=| . | `ー゚‐'/ `ー‐゚―' l.=lへ|~| そのことを |`ー‐/ `ー―― H<,〉|=| どうか諸君らも | / 、 l|__ノー| 思い出していただきたい . | /`ー ~ ′ \ .|ヾ.ニ|ヽ |l 下王l王l王l王lヲ| | ヾ_,| \ つまり・・・・ . | ≡ | `l \__ 我々がその気になれば !、 _,,..-'′ /l | ~''' ソースの受け渡しは ‐''" ̄| `iー-..,,,_,,,,,....-‐'''" / | | Brainf*ckということも -―| |\ / | | 可能だろう・・・・・・・・・・ということ・・・・! | | \ / | |