何かを学ぶには、実際に作ってみるのが近道だということ。

僕は、大学生時代に、細胞というものに不思議な魅力を感じた。
所属していた学科は電気電子工学科。分解したテレビラジオの集積回路に興味を示すならまだしも、僕はなぜか、生物の細胞に興味を示した。
当初、農学部で生物を学んでいる友人がいたのも影響の一つだろうし、高校時代に好きだった化学が生物の現象を手ほどきする道具の一つだったこともあると思う。

とにかく、細胞、とりわけ、細胞分裂に必須なDNAとDNAからタンパク質が合成されるプロセスに興味を示した。

僕が興味を示したあとに取る行動は1つ。ひたすら検索をかけて、複数の情報媒体から様々な観点からの説明を読み漁った。
生物の知識は、大学の一般教養の授業で、種の起源を刊行したダーウィンみたいな風貌の教授による高校生物の解説だけであった。

まぁ、DNAがA,T,G,Cの4種類の塩基から構成されていて、ワトソン・クリックがX線解析により解明したように二重螺旋構造をしているという情報、相補性という性質で、各塩基には結合することができるペアがあることなどは、それでも理解できた。

DNAからmRNAと呼ばれる物質に情報が転写されて、その組み合わせ(コドン)によって、アミノ酸が決まる仕組みがあった。アミノ酸列はそのままタンパク質になる。DNAというコードからアミノ酸列という情報をデコードしているわけだ。

別に、暗号化する対象はアミノ酸列じゃなくてもいいのでは?
アミノ酸列とコドンの関係も生物と同じじゃなくてもいいよね、ランダムに与えればいいのでは?なんてことを考えてから、

まず、A,T,G,Cをランダムに出力するプログラムを書いた。
次に、それを相補性にしたがって反転させるプログラム、mRNAに変換するプログラム、
mRNAをコドンに従ってアミノ酸に変換するプログラムを書いた。
開始コドン、と終止コドンと呼ばれるコドンを目印に、ランダムに与えられたDNAの文字列をパーサーよろしく、アミノ酸列に変換するプログラムを書いた。DNAの塩基配列全てに情報があるわけではなく、情報がない部分を切り落としてからアミノ酸への翻訳を行うらしい。これを模擬するプログラムをできるだけ忠実に作成した。

コドンとアミノ酸の関係を鍵として外部から与えてやるとDNAをアミノ酸列に変換するデコーダーの出来上がり。
暗号化はこの逆のプロセスを辿ればいい。アミノ酸列を与えて、規則に従ってDNAに変換して行くだけ。

あとは、一般化していく。コドンで定義されているアミノ酸は20種類ある。これを10進数の数列に対応させていけば、どんなデータでもアミノ酸列に変換することができ、DNAに変換することができるようになる。

これをコードに書き起こして暗号化に利用できるのではないか、ということを学生時代の僕は示唆した。
(社会人になってから、コードを掘り起こし、忘れかけていた仕組みを思い出し、colabratoryで動くようにした)

暗号化スクリプトを書くうちにDNAからタンパク質への翻訳プロセスに詳しくなったし、pythonでバイナリデータを作成するにはどうすればいいか、classの切り分け方はどうするべきか、などいろいろ考えるきっかけになった。

このスクリプトが暗号化に本当に役に立つのかは正直どうでも良い。
何かを作ることで、得られるものは多いということに気づけたのが1番の収穫である。
github.com