Home
2020年
2019年
2018年

8月31日 昨日の不正アクセス対応(2)

新しくVivadoをインストールしたマシンでもSnakeCubeの48bit版の合成(Implementation)が終わらない。 妨害がまだ続いているということ。VivadoはWindows10とCentOSで使っているがSUSEへの変更を模索。 SUSEのダウンロード中。
SnakeCubeは非常に小さい実装で高性能を実現したため、これまでにないシステムが作れるようになると思われます。 SnakeCubeによって小型ネットワーク機器のシステムでRSA暗号を採用しやすくなるのです。 楕円暗号しかサポートできない暗号チップでは、楕円暗号が解読される心配から、公開鍵暗号を使ってシステムを作れないと 思う人も多いと考えます。楕円とRSA暗号をサポートできるSnakeCubeであれば、どちらも解読の心配はあるものの、 公開鍵暗号を使ったシステムを作れると思う人も出てくると思います。
僕への妨害が続けば、産業の発展が妨げられ損害計上されると思うのです。


8月31日 昨日の不正アクセス対応

不正アクセスされにくい構造にすることかと思っています。 Vivadoが動くマシンをもう一台、増やしました。メモリ不足なマシンだったので、 メモリを購入。ついでにSSD、USBメモリも買いました。
小さなトラブルであっても、多数発生して、ほとんど作業が進まないという状況。 世界は待ってくれないはずなので、危機感を持つべきなんだと思います。

世間ではイーロン・マスク氏が豚の脳に電極を埋め込んで、埋め込みをはずした 豚が元気とかニュースになっている。
僕は、長いこと頭痛に悩まされていますが、この頭痛非破壊ではありません。しかも手術不要です。 豚の話は、危険なので頭痛がなくなれば話すことはなくなると思うのです。


8月30日 開発機まで不正アクセスで侵入されているかも

開発機のVivadoでSnakeCubeの48bitの合成しました。通常、合成に10分かかることはない。 ところが2時間を超えました。開発機に不正アクセスがあったものと推測されます。
幸いINPITのタイムスタンプ保管サービスに タイムスタンプを保管したばかりで、そのときバックアップを複数していたため、 ソースコードが破壊されていても大丈夫では、あります。 経験的には、ソースコードを破壊することはなく、産業スパイにとって不都合な小さな問題を 改ざんすることが最大だと考えています。
産業スパイが自宅に合い鍵で侵入して証拠隠滅してくることを想定して対策しています。 いくらINPITのタイムスタンプ保管サービスでタイムスタンプを保管しても、 データを破壊されると、SnakeCubeの記録を証明できなくなるのです。 産業スパイがデータ破壊に成功すると、別の企業で悠々とSnakeCubeの海賊版を作る ということができてしまうのです。
体中が軽く痛んで、動けなくなっている時間が長くなっています。 このまま妨害活動を野放しにしていれば、まだまだ続くと思われます。 脳神経を乗っ取られて、半分失神させられていることもありますが、 この予期された状態を冷静に分析し、対応していくので、結局は、 妨害活動を止めないと被害が拡大していくように思いますが、どうでしょうか。


8月29日 ソフトRISC-VとSnakeCubeでネットワーク機器みたいな

Facebookにインドが国をあげてRISC-Vのアプリケーションをコンテストする記事が投稿されていました。 XilinxのArtix7-35TまたはArtix7-100T FPGAボードが配られるとか。
ここからは、インドの話とは無関係になりますが、Artix7-35Tは、 僕がSnakeCubeでRSA 2048bitの性能測定で使ったものです。 Artix7はCPUは付いていないのでRISC-Vのソフトプロセッサになりますが、 ネットワークの認証などの重たい公開鍵暗号の処理はSnakeCubeで高速に演算できます。
高性能なARMマイコンよりもSnakeCubeは高速なので、たとえソフトプロセッサのRISC-Vが遅くても、 高性能なARMマイコンでは満たせない要求仕様を満たせるかもしれません。 例えばRSA 4096bit以上になってくるとネットワーク機器では遅延が問題となる場合は、 SnakeCubeを実装したFPGAが活躍するのかも。
ARM Cortex-A57 1.43GHzをopensslで性能測定するとRSA 2048bit(Private CRT)6.23[ms]です。 SnakeCubeはモンゴメリ乗算器1個(DSP 45個)なら3.05[ms]、モンゴメリ乗算器2個(DSP 90個)なら1.74[ms]です。 (SnakeCube単体での性能なので組み込んだときに、少し性能が下がる可能性はあるかも)
RSA 2048bitでもSnakeCubeが活躍できるかも。

The...

Risc-V Associationさんの投稿 2020年8月28日金曜日

8月29日 Xilinx ZynqにSnakeCube組込みソリューション

そういうソリューションを作れば、できるかもという話です。
Xilinx ZynqとはARM CPUを搭載したFPGAチップのことでLinuxを動かしてIoT機器をすぐに作れてしまいそうなものです。 安価なZynqは僕がSnakeCubeを実装したArtix-7なのでSnakeCubeをすぐにZynqへ組み込むことができると思います。
組込み向けの高性能なARMよりもSnakeCubeはレイテンシ性能が上なので高性能なARMマイコンより 安価なZynqのほうがコスパが良くなるケースはあるかもしれません。 RSA暗号の計算はSnakeCubeで全部やるのでキャッシュから秘密鍵が漏洩するというような問題はありません。 SnakeCubeのアーキテクチャ的には秘密鍵が漏れるということはありませんがFPGAに実装した場合は、 秘密鍵が漏れないことを保証するのは難しいかもしれません。
安価なZynqではDSP 90個以上のものは、あまりないのでモンゴメリ乗算器1個のSnakeCubeとなってしまいます。 RSA 2048bit(Private CRT)の性能が3.05[ms]です。Cortex-A57 1.43GHzでも6.23[ms]なので3.05[ms]の性能が必要な IoTではZynq+SnakeCubeになるでしょう。
DSP90個以上のZynqにすればモンゴメリ乗算器2個を使って1.74[ms]の性能も出ます。
RSAの性能不足でARMマイコンでは不可能なシステムでも、Zynq+SnakeCubeを使えばシステムが作れて、 大量に売れればSnakeCubeもXilinxも、儲かるということなんだろうと。


8月29日 SnakeCubeはSSHの公開鍵に対応できるか

GIGAZINEの記事 『SSHの公開鍵暗号には「RSA」「DSA」「ECDSA」「EdDSA」のどれを使えばよいのか?』
記事の最後にRSAとEdDSAと書かれているのですが暗号プロセッサSnakeCubeでEdDSAが 実装できるのかという話をします。
ただ一日中、頭痛や体の痛みでほとんど作業が出来ていない状況で、詳しく調べる時間が取れません。 四則演算、論理演算、モンゴメリ乗算ができるだけで良ければEdDSAを実装できると思います。 つまりSnakeCubeでSSHの鍵を守れます。
EdDSAは計算量が少ないみたいなので、高速化はいらないかもしれないですが、 SnakeCubeでのプログラミングは2つのモンゴメリ乗算器を使って高速化することです。 モンゴメリ乗算1回でA×D mod BとD×D mod Bの2つの乗算をします。 これを実行するモンゴメリ乗算器が2個あるので、これらを並列動作させて高速化します。
数か月前の日記でXilinxの別のシリーズへの対応や、IntelのFPGAへの対応ができそうか、 SnakeCubeのシミュレータを作って確認しています。FPGAはASICと違って、 乗算器のバラツキが大きいため、命令セットで違いを完全に吸収するのは、難しいのです。 なるべくプログラマから違いを見えないようにした命令セットにしていって、 暗号プロセッサのトップシェアへと向かえば日本の産業として大きくなるかなぁ。
脳神経を乗っ取って頭痛や体に痛みを与える人を異動させないといけないのかもしれない。


8月28日 僕の発明が国の研究のコア技術を超えた

詳しくは昨日の日記にあります。国の研究とは、 FPGAデバイスの特性を活かした高効率なFDFM Processor Core(広大演算器)によって科学技術計算で役立てようというもの。 その効率を僕の発明(SnakeCube)が、上回るということを昨日の日記で説明しています。 そしてSnakeCubeはスループットの効率だけでなく、レイテンシ性能においてはFDFM Processor Coreの50倍以上であり、 SnakeCubeが、いかに画期的な発明であるか、説明できたように思います。
国の研究ですから、税金がそれなりに投下されています。 僕の方は10年以上前に退職に追い込まれ、それ以来、ほとんど収入がない状態です。
SnakeCubeを国の研究に持って行きたいと思う人はあるのかもしれませんが、 前述した僕の状態のため難しくなっています。
国が研究しているコア技術を超える発明を支えるため、 なるべく税金ではなく商業で儲けることで賄えるという方向を模索しています。 僕が開発するSSLアクセラレータが売れることなのだと思います。
これまでの研究をしてきた研究者の生活はどうなるのか?という疑問について。 僕は修士卒で日立製作所の中央研究所に入り、すぐに実践配備され、運よく活躍して、 ICF3で大活躍をした後、退職に追い込まれ、もう10年以上、ほとんど収入のない生活を しているという問題の解決を、みなで考えて欲しい。一応、僕も研究者として就職した身です。
この発明は2年以上前に発見されています。妨害が防がれていれば、1年はかからなかったと思います。 今後は、発明の円滑な運用や、僕の状態の改善を考えていくのだと思います。


8月27日 暗号プロセッサSnakeCubeと広大演算器を比較

昨日、SnakeCubeのRSA 2048bitの記録を更新してタイムスタンプによる記録保存を行いました。 RSA 2048bit(Private CRT)の1.74[ms]が、どのくらいの性能なのか、比較をしないと、 わからないという人が多く、ネットを検索して論文を探しました。
広島大学の中野先生の論文が見つかりました。
The Parallel FDFM Processor Core Approach for CRT-based RSA Decryption

実は、この論文の存在は以前から知っていました。 今日、科研費の検索サイトで中野先生のプロジェクトを見つけ、データの改ざんを発見しました。 不正アクセスで改悪されていました。改悪の度合いが異常だったこと、上記の論文の存在を知っていたので、 気づくことができました。政府関係のサイトであっても改ざんされていない保証はないなと思いました。
中野先生は、少しだけ日立製作所にいらしゃったようです。広大演算器と勝手に呼んでしまいますが、ご容赦ください。 この手の研究は数字が精密に出てしまって、厳密に比較できてしまうのです。 発明は、時間や研究費に比例するものではなく、僕も日立製作所の中央研究所に入ったことがあるくらいの人なので、 SnakeCubeが広大演算器を超えることを言うのですが、お気になさらず、見てやってください。
広大演算器はスループットに特化した演算器です。 僕のSnakeCubeは90個のDSP(乗算器)を並列動作させて高速に演算をします。 一方、広大演算器は1個のDSPと1個のRAMの演算コアを複数使ってスループットを稼ぐ方式です。
上記論文の広大演算器はXilinxのFPGA、Vertex-6 XC6VLX240T-1 を使っています。 SnakeCubeで記録をだしたFPGAもXilinxでArtix-7 XC7A35TICSG324-1Lを使いました。 DSPは、どちらもDSP48E1なので全く同じ、Vertex-6 XC6VLX240T-1が600MHzで動作するのに対し、 Artix-7 XC7A35TICSG324-1Lは464MHzが最大なので広大演算器のFPGAのほうが少し高性能なのかもしれません。
論文にはRSA 2048bit(Private CRT)が98.21[ms]とあってSnakeCubeは1.74[ms]ですからレイテンシ性能は SnakeCubeが圧倒的に勝ています。デバイス当たりのスループットを考えます。 広大演算器がArtix-7 XC7A35TICSG324-1Lに何個、入るかを考えれば良さそうです。 Artix-7 XC7A35TICSG324-1LにはBRAMが50個しかないので50個が限界です。 スライスで計算すると48個程度かも。(1コア、108スライスで計算)
98.21 ÷ 48 = 2.05[ms]
通信回路の領域を考えてないので実際には2.05[ms]よりも低い性能になるでしょう。
SnakeCubeも、通信回路を空いている領域に入れると、少し周波数が落ちる可能性もありますが、 1.74[ms]と考えます。
SnakeCubeはデバイス当たりのスループットでも広大演算器に勝る

これまでRSA 2048bit SSLアクセラレータとして広大演算器が有利だと思われがちでしたが、 RSA 2048bitでもSnakeCubeが、お買い得!という結論です。 スループット特化型よりもスループットで勝るSnakeCubeの効率の良さが伝わればと。

SnakeCube 1個のDSPの数は90個なのでDSPが170個のデバイスでは1個しか入らないことを考えると 必ずしもSnakeCubeがスループットでも勝るということはないのかも。 逆にVertex-6 XC6VLX240T-1にSnakeCubeが何個入るかを考えます。 デバイスにDSPが768個あるのでSnakeCubeは8個入ります。一方、論文では広大演算器は320個入るので
広大演算器 98.21 ÷ 320 = 0.307[ms]
SnakeCube 1.74 ÷ 8 = 0.218[ms]
こちらもSnamkeCubeがスループットで勝っているようです。


8月27日 SnakeCube、RSA2048の記録を更新(3)

日記(1)日記(2)に続いて、また記録を更新しました。 XilinxのFPGA(XC7A35TICSG324-1L)を搭載するDIGILENTのArtyでRSA 2048bit(Private CRT)が1.74[ms]で計算できました。 90個の乗算器を全部、236MHzで効率的に稼働させています。乗算器の稼働率は74%。 乗算器を使っていないときもシフトレジスタとして使っているのでDSPの利用率は、ほぼ100%です。 FPGA(XC7A35TICSG324-1L)デバイスの限界は450MHz以上ですが、Xilinx Artix-7では236MHz以上は厳しいかもしれません。 Alveo(UltraScale/UltraScale+)ではデバイスの限界にもう少し近づけることができるかもしれません。 (DSPがArtix-7より高機能なのでDSPだけでループさせられるかも)
1個のモンゴメリ乗算器は45個のDSPで構成されていますが、 暗号プロセッサによって2個のモンゴメリ乗算器を並列に動作させています。 Vivadoの画像をみると上にまだ通信回路が入りそうな余地があります。 恐らく、通信回路を入れると配線リソースを暗号プロセッサから奪うので周波数が236MHzから下がるのだと思います。 LEDで周波数236MHzを確認したverilogをタイムスタンプして証明書(PDF) を発行してもらいました。(オンラインによる自動発行)
YouTubeに記念動画もアップしています。


図をマウスでクリックすると拡大されます


8月26日 腹痛、イテテ

午前2時。腹痛とともに目が覚める。 脳神経を乗っ取られているので、いろいろなことが起きるが、この腹痛は初めてかもしれない。 1時間近く、叫びならがらベッドの上を、のたうち回った。激痛ではないが、内臓破壊されてないか心配。

午前3時15分。再び痛みが増して、ベッドの上をのたうち回った。

正確な時間はわからないが午前4時ごろには痛みがなくなって、午前6時過ぎまで、ぐっすり寝た。


8月25日 Xilinx Alveoを買うか迷う

2003年、PCIカードのSSLアクセラレータ AEP1000Lを秋葉原のお店で買った。 当時の僕は日立の金融部門で認証局関係の仕事をしていたが、 趣味で自分のお金で購入。税込み13万4400円。性能はRSA 1024bit(Private CRT) を1秒間に1000回というのが公称値でした。 RSA 1024bit(Private CRT)1回の時間は20[ms]だったと思います。 1999年のICF3は3.48[ms]でしたから、まだまだ負けていませんでした。

XilinxのAlveoはPCIeカードなので僕のSnakeCubeをインストールすれば AEP1000Lのようなアクセラレータカードとして、すぐに使えそうな気がしています。 SnakeCubeは、暗号プロセッサですが、AlveoにはPCIeのハードとドライバが用意されていると思うので、 すぐに作れそうな気がするのです。
作れば、どのくらい売れるのかと、思いつつ、Alveoを眺めているところ。 Alveo U50は30万円以上、売れる当てがないと、ちょっと厳しい値段。 動画配信用にAlveo U30が既に販売されているが、一般向けにはまだのようです。 SSLアクセラレータとして性能はDSP 5952個のU50がいいのか、DSP 1728個のU30がいいのか。 SSLアクセラレータの場合、性能があっても使いきれないと、無駄になるので、試案のしどころ。
僕がQiita投稿した RSA 8192bitの性能を測定するソースコードを見るとわかるのですがRSA暗号は 鍵長が長くなると、非常に重たくなっていくので、そういった将来を考えるなら 高性能なAlveoでもいいのかもしれません。
まだ半分ぐらいしか検証できていませんが、SnakeCubeは、鍵長が長くなっても CPUと比較して性能が落ちないので、鍵が長くなった場合、AlveoのSnakeCubeは活躍するかもしれません。
半分の検証で言うのは、多少無理があるのかもしれないですが、SnakeCubeを実装した Xilinxのローエンドに近いFPGA(XC7A35TICSG324-1L)でRSA 2048bit(Private CRT) 1.77[ms]という数字が、 もうすぐ出ます。この数字からRSA 4096bit(Private CRT)の数字を作ると8[ms]くらいになります。
上記、Qiitaブログで一番、性能がいいCore i3 3.4GHzの数字は6.5[ms]ですから、RSA 4096bit以上では Xilinxの比較的ローエンドのFPGAがレイテンシ性能で上回ることになり、 結論を急ぐとAlveoのSSLアクセラレータが活躍することになると思っています。 実はレイテンシ性能が下回っていてもSSLアクセラレータでは、あまり問題なく、現状の鍵長でも、 十分に活躍します。
SSLアクセラレータといっても秘密鍵を堅牢に守りたい需要はあると考えられるため、 万が一、ASICのSnakeCubeを作ろうということになれば、Alveo SSLアクセラレータと競合することになる。 このあたりがAlveoを購入しようかと思う理由。ASICのSSLアクセラレータと比較してAlveoが安価なら、 Alveoも売れるのかもですが。
SnakeCubeの暗号プロセッサの命令セットを公開して素数判定などの処理や、科学技術計算向けのアプリを Alveoで走るようにすれば、Alveoの価値は上がるのかもしれない。

画像はAlveoではなくてAEP1000Lを買ったときのレシートと、購入したAEP1000Lの写真。


8月23日 Verilog版のSnakeCube開発(47)

作業報告のみ。頭痛で軽く思考できなくされていていることも作業が進まない原因。 暗号プロセッサSnakeCubeの性能を決めるモンゴメリ乗算器の周波数を改善するべく試行錯誤しています。 とりあえずモンゴメリ乗算器を構成する90個のDSPの位置を固定してみたところです。 下図(VivadoのImplementation)でオレンジ色の縦の線が2本あると思いますが、それが90個のDSPです。 クロックの位相を45度ずらしてみたり、いろいろやっていますが、250MHzを達成するものが合成されず、 合成結果の詳細を細かく分析しています。
設計時にディレイの厳しいところは、ちゃんと対策しているのですが、合成でディレイを満たさなくなるまで、 論理圧縮されて、あれれとか。そんな状況。

図をマウスでクリックすると拡大されます


8月23日 改めて電通大演算器との比較

巨大整数用四則演算プロセッサSnakeCubeが高速である秘密 で電通大演算器と呼ぶことにした崎山先生の論文ですが、改めて読み直すと少し違っていたので、訂正したいと思います。
僕のツイッターのタイムライン上に電通大演算器を忘れてくれというツイートを見かけた。 どうも電通大演算器の論文を読み直して欲しいのだと解釈。パソコンのHDDに保存してあった 崎山先生の論文を読み直しました。何が言いたいかといえば、ここ数日の日記を読んでいただければわかるように Vivadoが勝手にフリーズする環境なのでパソコンに保存してあった論文が改ざんされていない保証はない。
都合のいいように論文を改ざんをして、それを僕に読ませるきっかけをツイッターで与えた。 僕はそう判断しています。この方法、これまでも何度か、やられたことがある。 東大関連が陣頭指揮している感じ。
これまでの経験もあって、疑いましたが、論文に改ざんがあったのではなくて、僕が読み違った可能性もあると思っています。
僕はこの論文をはじめて見たときに、圧倒的に僕が勝っていると一瞬で判断してしまったため、 この論文のことは忘れていました。
僕のブログでは論文にあるUiからT0iの区間を1サイクルと説明しましたが、改めて読むと2サイクルになっていました。 圧倒的に勝っていると思ったので結果まで読まなかったのですが、 今読むとXilinxのFPGA、XC2VP30のデータがあることに気が付きました。 XC2VP30は、もう絶版になっているので、検証することができません。なんか怪しいので、怪しまれないためには、 Xilinxの新しいFPGAでデータを取り直すのがいいのかもしれません。
改めて読み直した論文では、僕とは別の方向でパイプライン化をして高速化をしています。 電通大演算器はXC2VP30で125MHzの周波数が出たと書いてあります。 そして1024bit RSA(Private CRT無し)が4.4msと書かれてありました。 k-ary methodを使えば2.7msとも書いてあったのですが、ASICに実装する場合の ゲート効率の問題で対象からはずしました。
電通大演算器の4.4[ms]と比較できるSnakeCubeの数字は、正確な数字はまだ出していませんが約1.5[ms]です。 SnakeCubeのFPGAはXilinxのXC7A35TICSG324-1LなのでXC2VP30との違いを考慮する必要があります。 XC7A35TICSG324-1Lは新しいデバイスですがコスパ重視の低性能タイプ。 XC2VP30は、良く知りませんが、当時としては高性能タイプなんだと思います。
SnakeCubeが、圧倒的に勝っているという僕の認識を改善したくて、再度、崎山先生の論文を読むように 仕組んだということなんだろうと思っています。
問題なのはXC2VP30は絶版になっていて4.4[ms]を改ざんしても、誰も検証できないこと。

追加で言うとSnakeCubeは演算器だけでなく暗号プロセッサも入っています。 そして暗号プロセッサは2個の演算器を並列に実行させることが可能です。

どうして電通大演算器がSnakeCubeと違うパイプライン化をしていくことになったのか。 僕のこのブログ わかりやすいICF3-Fのモンゴメリ乗算器の説明にある魔法の中継FF(フリップ・フロップ)に、 気が付くことができなかったからなのだろうと。この魔法の中継FFがあるおかげで、SnakeCubeは ビット長の大きな演算器が作れます。一方、電通大演算器は1024bitのRSAで256bitの演算器になったのは、 中継FFがなくて、大きな演算器が作れなかったのかなと。


8月23日 僕の出生の秘密

親に聞いたところで本当のことを言うとは思ってないので聞いたことがありません。 僕がこの話をするのは、僕が特別な人間で、 だから世界の銀行に収めるような暗号装置の開発を担当したと思う人がいると思ったので。
僕の子供の頃は、ごくありふれた家庭で、ごく普通に育ってきた。 僕はもう50歳を超えますが、数年前までは、疑う余地もなくそう思っていた。 いろいろな情報を総合して考えて左手首の傷にたどり着いた。 そして、さらに数年が経過した今、この左手首の傷について、こう思うようになった。
この左手首の傷は、赤ちゃんの頃からある。事故でついた傷なら、出血多量で、 その場で死んでいる。僕が生きているってことは、医学的に死んだことにして、その場で蘇生。 医学的な死、つまり法律上死亡したことで法律的な手続きがスムーズになったのだろうということ。 考えられることは、財産の相続権。そして僕を蘇生したのは、念のためかもしれない。 財産の相続権はともかく、そう考えていくと、いろいろな状況が、それを思わせる。
やっぱり特別な人間かも、でも人権を失うようなことはないと思うのです。
蛇足ですけど、左手首の傷は真実ですから、 僕の映画化とか、小説とか、売れるネタになりそうですよね。 僕が成功すれば、映画も儲かるみたいな(笑)

図をマウスでクリックすると拡大されます


8月22日 Verilog版のSnakeCube開発(46)

今、目の前で起きている現象を言うとCentOS7上のVivadoで論理合成中、Vivadoが一時的にフリーズ。 論理合成プロセスがサスペンドするわけではなくてVivadoのGUIがフリーズする。 これが何度も起きている。Vivadoを使いはじめて1年以上にはなるがフリーズしたことはない。
これ以上、Vivadoがフリーズすることがなくなれば、いいのですが。


8月22日 GNUに寄付をするとCentOSの調子が良くなる?

SnakeCubeの開発OSについて、論理合成や動作検証のほとんどをWindowsマシンで実行しています。 僕のスキルはWindowsとLinuxのどちらかが得意ということはなく、どちらもそれなりにできます。 CUIによる開発が好みであること、今後も、状況に応じてWindows、Linuxを使っていくことを考えて、 SnakeCubeの開発OSとしてCentOSも使っています。
Windowsの調子も良くないのですがCentOSの調子も悪くて、困っているのです。 プロセスが勝手にサスペンドして論理合成が止まるケースが多発中。 ちょうどGNUから寄付の勧誘メールが届いていて、 GNUに寄付をすると調子が悪い問題が解決するなら、また寄付をしてみようかと。 (24時間営業の産業スパイが脳内にいる)
GNUに寄付をすると領収書と領収書番号が届くので安心できるように思っています。 今回も寄付をするとしても、またこれまでと同じ少額の寄付になる予定。 CentOSの調子は良くなるのだろうか?
1999年のICF3の開発をしていた時代も、容赦なく取り立てに来るのですが、 社会は冷たいというのが僕の感想です。もう何度も話ていますが、当時は最も残業の多い部署で、 いっぱい仕事をさせていただいたおかげで、世間知らずだったというか、なんというか。 Perlはイタリア人が作ったからイタリアの物を買えみたいな見えない圧力がかかり都内の大手デパートに 1万円のイタリアのワインを買ったこととかあります。 Perlの開発者、ラリー・ウォールさんはアメリカの人だったというのを後から知って憤慨しました。
そういった経験を踏まえ、今後は、社交性を高めていければと思っています。 参考までの話、SnakeCubeの動作検証はPerlを使わずC言語のみでできるように開発環境を作りました。 これは、「取り立て」の問題もありますが、WindowsにはPerlが標準でついていないので、 Perlをインターネットからダウンロードしてインストールすることになるのですが、 ダウンロードしたファイルが安全かどうかということもあるのです。


8月21日 SnakeCubeのビジネスをどうやっていくのか

1999年のICF3 の暗号プロセッサは初期検討から商品に付属するフロッピーディスクまで僕が作っていました。 フロッピーに貼るシールの印刷は、僕ではありませんが、シールを貼る仕事はしています。 もちろんフロッピーに書き込むデータの作成の仕事もしています。
そういった実績のある僕が1人で開発して直販するので儲からないはずはない、と漠然と考えていました。
XilinxのAlveoについて、あれこれ考えていたりします。
SnakeCubeを使ったSSLアクセラレータで利益を出せるところに直接いって、 話すことができればと思ったのです。FacebookやZOOMでもいいと思っていますが。
SnakeCubeは従来よりもずっと高性能、高効率なので発明だと思っていますが、 発明の対価が少ないと不平を言うよりは、自分で効率良く発明の対価を得たいと 思っているので、その際には、よろしくお願いいたします。
まだ、もう少し開発を続けていると思いますが、そのうち。


8月21日 SnakeCube、RSA2048の記録を更新(2)

昨日の日記でRSA 2048bit(Private CRT)が1.91[ms]になりました、と報告しました。 プログラムの改善のみで1.77[ms]になりそうです。 暗号プロセッサのプログラムなので普通のアセンブラだと思っている人が改善できることはありません。 僕の頭が破壊されると世界的な記録?に影響が出ます。 このまま人の頭の中に無断で乗り込んできて妨害活動をしているという状況が続けば SnakeCubeをコアにしたビジネスに影響がでて僕以外の人にも迷惑が及びます。 このあたりで、無断で乗り込んで悪さをすることを、止める必要があると思います。


8月20日 SnakeCube、RSA2048の記録を更新

暗号プロセッサにモンゴメリ乗算器をもう一個追加してモンゴメリ乗算器2個で RSA 2048bit(Private crt)を実機で計算させました。LEDで正しい答えが計算できていることを確認しました。 モンゴメリ乗算器の周波数を250MHzから232MHzに下げたため性能は1.91[ms]です。
下図はVivadoによる実装データの記念画像です。まだ通信回路を実装できる余裕はありそうです。 この記録はnone-subtraction Montgomeryを採用しているので、製品で採用できなければもう少し性能が下がるかもしれません。 none-subtraction MontgomeryについてはCQ出版DegignWaveの2008年あたりに解説記事があるので、そちらを参照してください。 この性能測定で使ったArty と同じXilinxのFPGAを使ったCmod A7 でSSLアクセラレータを作る可能性が大きくなっていますが、ボードについているクロックが100MHzではなくて12MHzなので、 もしかすると、ちょっと性能を落とす必要があるかも。予測値は2.0~2.1[ms]。
多少作業をしたくらいでは、これ以上、性能は上がらないかもしれませんが、引き続き記録更新を狙っていきます。

図をマウスでクリックすると拡大されます



8月20日 Verilog版のSnakeCube開発(45)

頭痛と暗闇と体が重くなる現象が消えて楽になったという日記を書いたら、再び、 頭痛が酷くなってきた。この頭痛を止めないと、どうなるかの予測が必要だと思います。 SnakeCubeの発明が僕から動くことはないのでSnakeCubeの発明が発明でなくなれば、この国の損失となるはず。 この国の損失が利益になる人にとっては、この状況がいいのかもしれない。 つまり、この頭痛を止める必要があると思っています。
暗号プロセッサSnakeCubeの性能を決めるのはモンゴメリ乗算器の周波数。 この目標を250MHzから232MHzに下げたところ、合成に成功したケースが1つ見つかりました。


8月20日 Verilog版のSnakeCube開発(44)

頭痛と暗闇と体が重くなる現象が消えて楽になっています。 それでも左目の調子が良くならず、左目をつぶって、右目だけで作業をすることはある。
暗号プロセッサSnakeCubeの性能を決めるのはモンゴメリ乗算器の周波数。 目標を250MHzから240MHzに下げたが、クロック生成のところでノイズが増加するため、 まだ240MHzの合成は成功していません。細かいところの改善を繰り返して240MHzを成功させることを継続中。 クロックの技術に詳しくない人のために、ちょっと説明をすると基板上の100MHzのクロックから 任意の周波数のクロックを生成する回路がXilinxによって提供されている。 これが生成したい周波数によってノイズが増減する。ノイズの量が示されているから、 これがディレイの計算に入るのだろうと考える。ノイズの量を見る限り240MHzは割高な周波数で、 できるなら250MHzを達成するような改善策ができればと考えているところ。
参考までに。知っている人も多いと思いますが、僕は1996年の日立の大型コンピュータの基板において、 CMOSノイズを評価しながら配線長を決めるという仕事していました。CPUはIBM製。 地味な仕事のように見えるけど当時、現場では注目されていた仕事。成果としても大きい。 当時のIBMのCMOSは日立よりも高性能でIBMが1サイクルで基板上を転送するところを、 日立のCMOSの性能の問題で1サイクル転送ができず、1.5サイクルで転送することになったため、厳格なディレイ計算が要求された。 転送サイクルは1.5サイクルですが転送ピッチは1サイクルなので、IBMと比較して、あまり性能を劣化させずに、 IBM互換機を製品出荷できたのです。 僕の役割はPerlプログラムによる回路シミュレーションの自動集計と、配線長の自動計算。 電気屋にはプログラマがいなかったことが幸いして活躍している。


8月19日 Verilog版のSnakeCube開発(43)

頭痛のため布団にいることも、しばしば。風邪のような頭痛だけど風邪と違って壊れてないかが心配。 少なとも完全に回復はしない。
論理合成や動作検証などでパソコンが足りなくなっている。 Intel Core2 Duo E8400(3GHz 2コア2スレッド)に換装した10年以上前のパソコンの手入れをして動作検証用にしてみた。 動作検証にかかる時間が思ったよりも遅くてベンチマークテストをやってみるとやっぱり遅い。66%くらいの性能しか出てない。 CPUにスローの魔法をかけられたかと一瞬、思ったが、偽物をつかまされた可能性を考えた。 インターネットで調べてみると、どうもBIOSの設定でShutdown Temperature の温度設定をすると CPUクロック倍率が6倍に固定になる仕様らしく、魔法でも偽物でも、なかったようです。 Shutdown TemperatureをDISABLEにしたらクロック倍率が6倍から9倍になってE8400の仕様である3GHzで動作するようになった。
これで開発速度が向上した。


8月19日 Verilog版のSnakeCube開発(42)

8月14日に暗号プロセッサSnakeCubeがXilinxのFPGAでRSA 2048bit 3.05[ms]を達成したことを報告しました。 このSnakeCubeはモンゴメリ乗算器が1個(DSP 45個)です。これを2個に増やしたものを開発中です。 XilinxのXC7A35TICSG324-1Lは24×17の乗算器(DSP)を全部で90個持っていますが、これを全部使ってRSA 2048bitの性能を向上させます。 SnakeCubeのVerilogシミュレータでは正しい答えを計算できました。現在、論理合成中です。 モンゴメリ乗算器1個のときはFPGAのリソースの使用率が60%くらいでしたが、2個になって80%(DSPは100%)くらいになっています。 リソースの使用率が増えた影響でモンゴメリ乗算器の周波数250MHzを達成するのが難しい状況。 周波数240MHz辺りなら論理合成に成功するかもという状況です。もし240MHzで論理合成が成功すれば3.05[ms]から1.85[ms]に性能が改善されます。
今もなお、頭の痺れで十分な精度をもって仕事をするのが辛い状況です。 この問題を解決するため、念入りに某大手企業を締め出していいことにしたいと思います。 これはご協力いただくのが簡単なので、効果が期待できるように考えています。


8月16日 HDD消去を忘れずに

HDDの消去を怠っていない、ということを言いたいだけ。 捨てたHDDから開発データが盗難されることのないように。
今日、HDDの消去をしていたらHDD消去ソフトから見えない国内メーカ製のHDDがあって、ちょっとびっくり。 LinuxベースのHDD消去ソフトとWindowsベースのHDD消去ソフト、どちらからも見えない。 HDD消去ソフトの過去バージョンを引っ張り出して消去しました。
HDD消去で時間を潰してしまいました。きちんと開発するコストは大きいのかもしれない。


8月16日 XilinxのRSA暗号のライブラリ

既にあるようです。ハード実装だと書かれているのですがFPGAのことをハードだと言うのであれば、 僕のSnakeCubeで置き換えると、恐らくSnakeCubeが圧倒的に高速。 XilinxのAPI(XilRSA)はCRTを使っていないので、現在、性能を測定しているSnakeCube 1032bitでは 置き換えることはできないです。そのうち、そのまま置き換えられるものを考えてみようかと。 XilinxのAPIは事前定数 R^2 mod Mも使えるようなので、この事前定数が使えればSnakeCubeは、 もう少し性能が上がります。R^2 mod Mの事前定数がなくても演算できるハードがSnakeCubeの メリットかも。


8月15日 食事中のテレビ

夕食中にテレビで「知られざるガリバー エクセレントカンパニーファイル」が放映されていた。 僕の席からだとテレビは、ほぼ真後ろの位置なので全く見えない。両親がイリソ電子工業が出ていると言う。 どうもイリソ電子工業が市内の企業だと思ったらしい。 何度も言うのだが、僕は一向にテレビの方向に顔を向けることはしない。 目が悪くなって後方のテレビを見ても、あまり良く見えないのだ。両親は目が悪くなっていることを知らない。
日替わりで視力が変わるし、もう眼鏡では矯正できないレベルに突入していて、眼鏡では改善できない。 視力を奪ったヤツを止めないと、どうにもならない。


8月15日 本日のHDD故障2個

左は2003年の40GBのHDD、右はamazonで売られていた激安中古HDD。 どちらも変な音を発生するようになったので交換。 変な音を発生させるHDDは過去にも、何度も経験している。 しばらく休ませて他の場所で使うと、しばらく動くということを繰り返す。 変な音がするたびにHDDを廃棄すると自然故障率を超えるような気がするし。
40GBのHDDは廃棄、右のHDDは3回書き込みのディスク消去中。どこかで再利用するか。

写真にHDDメーカ名とか映っていますが、あまりHDDメーカとか関係ないように思っていたり。 1日平均3回~5回、「気に入らない」とか言いながら僕が使っているパソコンのUSBを勝手に切断する USB切断魔が24時間体制でいることが問題。 切断するのは、ほとんどがCPU切替機で、被害はないけど、イライラはさせらている。 ここ数十年の経験から言うと、切断できるのはUSBに限らないという予想。かなり多彩ないたずらができる様子。 皆さんも、振り回されないように、偽装も多い。


図をマウスでクリックすると拡大されます


8月14日 暗号プロセッサSnakeCubeがXilinxのFPGAでRSA 2048bitを3.05[ms]で演算できました!

Facebookに投稿した内容と同一です。昨日の日記を詳しくしたような内容。

この暗号プロセッサが日本に明るい将来をもたらすと思っています。商機を逃がさないようにするためには障害の排除を急ぐべきなのかもと思っています。

測定に使用したFPGAボードはDIGILENTのArty、FPGAはXilinxのXC7A35TICSG324-1Lです。RSA 2048bit (Private crt)、1回の演算時間が3.05[ms]

このFPGAには乗算器(24×17)が90個あるのですが、RSA暗号では多数の乗算器に有効な演算をさせることが難しく、これまであまり高性能、高効率なもを作ることができていません。僕の発明と僕が1999年に製品化した暗号プロセッサにより乗算器に有効な演算を連続してさせることが可能になりました。
今回は90個の乗算器のうち45個で約75%の利用率を達成させて3.05[ms]の性能を出しています。演算器は1032bitですがCRTを使うことで2048bitのRSAを演算しています。暗号プロセッサも、役に立っているということです。乗算器の周波数は250MHzです。Xilinxのデータシートには最大290MHzで動作することが書かれています。乗算器の構成を変更すると最大464MHzになるらしいですが250MHzが実用的な限界かも。記録だけを考えるなら、もっと周波数を上げることはできるかもしれないですが。SSLアクセラレータの製品にすることを考えているため。
周波数を決めているのはデータ系のパイプラインではなく最下位ビット近辺の演算をブロッド・キャストするところです。データ系のパイプラインの周波数だけを示して高速だと言っている海賊版があるので念のため。
DSP(乗算器を含んだ小さいプロセッサ)では5サイクルに4回、有効な乗算をしています。空いている1回でシフトレジスタの役割をしていることとも効率がいい要因になっています。
暗号プロセッサ1個、乗算器(45個)×1でFPGAのリソースの60%を使っています。これから乗算器2個になるような改善をしてArtyでの記録更新を狙います。成功する保証はありませんが、成功したら、記録更新の報告をします。
図は、正しく計算できたことをLEDを使って1バイトづつ表示させるためのArtyのLEDとスイッチ、ボタンの配置です。


図をマウスでクリックすると拡大されます


8月14日 Verilog版のSnakeCube開発(41)

WindowsでVivadoが落ちる件。落ちたときのメッセージを見るとメモリ不足なのですが 32GBのメモリを搭載しているマシンなので、 不正侵入したユーザープロセスがメモリを確保して落ちた可能性も考えています。 LinuxのVivadoでは同じマシンで論理合成(232ケース)をしても落ちていません。 基本的には、ハードを含めたあらゆるサイバー攻撃が可能なんだとは、思っているのですけど。 より簡単なサイバー攻撃で十分な場合は、それで済ますという傾向があるようです。 僕の原因追跡の思考を読みながら別の手を打ってくるとか。かなりキツイ。

2020年8月14日 9:00AM
再びメモリ不足で落ちました。今回はエラーメッセージがでることなく落ちています。 このマシンは24GB搭載のマシンですが、Vivadoのある一つのプロセスがメモリの90%を消費していました。 本当にメモリ不足で落ちたように見えるのですが、 サイバー攻撃する人の目線で考えるとメモリ不足を偽装する可能性があると見ています。 これがサイバー攻撃であるかは、ともかくWindowsで苦戦しております。


図をマウスでクリックすると拡大されます


8月13日 実機で現時点でRSA 2048の最高性能を確認

実機での確認が遅れた理由はサイバー攻撃だけでなく、 実機ではレジスタ0番の値しかLEDから読み出せないハードだったからです。 1032bitのSnakeCubeではRSA 2048bitの演算結果を2本のレジスタに格納するため、 複数のレジスタ番号をLEDで読み出せるようにする必要がありました。 その修正をして、論理合成をするのですが、232個の論理合成をして成功するのは2、3個なので、 時間がかかってしまいました。
今回、Artyの実機で確認された性能です。
RSA 2048bit(Private CRT) 3.05[ms]
Xilinx Artix-7のFPGA、XC7A35TICSG324-1L(Arty)での世界一とかなってないだろうか?
参考までにCmod A7も 同じFPGAチップですがクロックが100MHzではなくて12MHzなので、同じ性能はでないですが、参考にはなるかと。
これからモンゴメリ乗算器を、もう一個追加してArtyでの記録更新を狙います。成功するとは限らないですけど。

図をマウスでクリックすると拡大されます


8月13日 Verilog版のSnakeCube開発(40)

サイバー攻撃の被害が大きくなってきました。 Windows上で動作しているVivadoでSnakeCubeの合成(232ケース)を実行中、 約100ケースが終わったところでCPUの利用率0%に近い状態になっています。 約100ケースが終わったところで強制終了されたのと同じ状態です。
暗号プロセッサSnakeCubeは今後、活躍する技術であることは、明らかであるように思っています。 今、FPGAによる実機で検証されたばかりで、大事なところなのです。


8月13日 Verilog版のSnakeCube開発(39)

WindowsマシンにXilinxのVivadoをインストールするためダウンロードした VivadoのファイルをUSB-HDDからWindowsマシンにコピーするところでサイバー攻撃にあって、 コピーを妨害された。一夜が過ぎた、早朝、もう一度、コピーをすると、やはり妨害してきた。 このため作業に遅れが生じています。昨夜、妨害されていなければ、 この早朝に修正をしたSnakeCubeの合成(232ケース)が終了していたかもしれない。

8月13日 6:30AM
USB-HDDからHDDを取り出してeSATAケーブルでVivadoのファイルをコピー。 現在、コピーをしているところですが、35.5GBのファイルが展開されているフォルダなので 時間がかかります。 コピーが終われば、自作のフォルダ比較ソフトでコピーが正しくできたかを確認。 そして、USB-HDDのHDDを別のWindowsマシンにあるファイルともフォルダ比較ソフトで ファイルになにか細工がされていないかを確認。妨害によって作業が遅れています。

マシンにeSATAのポートがあると、多少、抵抗できるかも。


8月12日 Verilog版のSnakeCube開発(38)

今日はSnakeCubeの開発環境について書いてみたいと思います。 不正アクセスに備えてWindows/Linux/FreeBSDなど、いろいろなOSで 動作するように開発環境を作ってきました。 単一の環境では不正アクセスなのかバグなのかを判断するのは難しく、攻撃もされやすい。 それでもUSBの回路を不正アクセスされると、厳しいのですが。 Verilogが動作する1CD Linuxも自作しているので、開発環境がインストールされていないマシンでも、 すぐにVerilogを動作させることができます。
XilinxのVivadoはFreeBSDには対応していないのでFreeBSDでは、すべての開発をすることはできません。 しかしWindowsではすべての開発をすることができます。 ただLinuxのCUIが便利なのでWindowsだけで開発することはないとは思いますが、 Windowsが多くなる傾向のように思います。
頑張った点はPerlや多倍長整数演算ライブラリGMPを使っていないこと。 どちらも苦労してます。
新しいフリーソフトをパソコンにインストールするとき、そのフリーソフトが安全であることを、 考える必要があって、なるべく標準のツールで開発できるようにしたのです。


8月11日 暗号プロセッサSnakeCubeのビジネス

ソフトバンクのARM株売却などARMが話題になっているようです。 SnakeCubeはARMのようなIPビジネスにならないか、考えているところで、ARMが気になったりしています。 ARMのようなIPビジネスは中立性がないといけないみたいな。 アップルのようなハード・ソフトを販売しているところでは、中立性が保てないとか。議論されている。
RSA暗号の鍵を生成するためには素数判定の演算が必要です。 鍵が大きくなると飛躍的に演算量が増えるため、暗号プロセッサSnakeCubeは、 そういった用途でも役に立ちます。ただARMほど用途はなく、 中立性を貫くことによるデメリットのほうが多いような気もしています。
現在、僕はSSLアクセラレータを開発していますが、SnakeCubeをIPとして販売すれば、 同じくSSLアクセラレータを開発する可能性があり、競合します。 競合するものは、作らないように制御できれば、いいような。


8月11日 Verilog版のSnakeCube開発(37)

2008年のCQ出版DegignWaveに改良型モンゴメリ乗算の方法が説明されています。 このIEEE論文にあった方法を暗号プロセッサSnakeCube(8月3日タイムスタンプ版)用にプログラムを作ってみました。 まだVerilogシミュレーションで正しい結果が得られただけでFPGAでは動作を確認していませんが、 RSA 2048bit(private crt)が3.05[ms]で演算できることが確認できました。
柔道やボクシングのように階級別にすれば世界一とか、なってないかぁ。 XilinxのArtix-7(27nm)、UltraScale(20nm)、UltraScale+(16nm)で3階級制覇とか。(笑)
頭痛は現在も続いています。厳密な表現をするなら脳神経を乗っ取られ人体実験されている状態。 実にいろいろなことができるようです。目を見えなくすることも、心臓をつつくこともできる。 東大にギリギリ合格できないところまで偏差値を下げることとか。 人体実験は禁止されているので、取り押さえれば、暗号プロセッサの開発が捗ることは間違いないと思うのですが。


8月10日 Verilog版のSnakeCube開発(36)

XilinxのVivadoをWindows10にインストールするのに必要な労力。 ただインストールするのは簡単なのですがセキュリティを考えると、 かなり手間がかかる作業になるという話。 Vivadoのダウンロード・ファイルが35.5GBもあってtar形式なので Windowsに何か、ソフトを追加しないと解凍できない。 そしてLinux系のOSはWindowsで使われるNTFSなどのファイルシステムを必ずしも サポートしていない。Ubuntuなど便利なOSもあるが、Ubuntuに含まれるソフトの何かが、 勝手に何かしないか心配でCentOS7を使うのだが、NTFS、exFATへのアクセスは手間がかかる。 そしてexFATが使えるようにFUSEをインストールしたが、最近、動かなくなった。 そこで自作の1CD Linuxを使ってVivadoのファイルをNTFSのファイルシステム上に展開することに。 自作の1CD Linuxを作る労力は、馬鹿にならない。1CD Linuxのセキュリティも完全ではない。 そこでWindowsを使ってVivadoを展開したものと、比較する。この比較のソフトウェアは自作。 一週間くらい作業を止めて自作のフォルダ比較ソフトを開発している。
産業スパイに24時間監視されているせいで、安全性のために費やされる時間が多くなっている。 24時間営業の産業スパイ以外にもサイバー攻撃を仕掛けてくることもあるとは思うので、 完全に無駄というわけではないのですが。


8月10日 Verilog版のSnakeCube開発(35)

再び頭痛。頭の痺れ。狭い範囲の思考しかできなくなるのが辛い。物忘れも激しい。 RSA 2048bit(private crt)のプログラムをC言語シミュレータとVerilogシミュレータで乱数を使って検証中。 Verilogシミュレータで1032bitのSnakeCubeを動かすとRSAの演算1回で1時間以上。 さらに乱数系はicarusでしか動かなないのでRSAの演算1回で8時間とか。 自宅に計算サーバが2台なかったら、辛かったかも。


8月9日 Verilog版のSnakeCube開発(34)

人工頭痛から体が怠くて動けない状態に変更されて作業があまりはかどっていません。 ただ布団に入っても頭は動いていることが多いためRSA 2048bit(private crt)の性能が、 もう少し上がるのを思い出した。2008年頃のCQ出版のDesignWaveに記事があったIEEE論文の改良型モンゴメリを使うと、 もう少し早くなるのです。ただし鍵長が長くなると効果がなくなっていくので本番の製品で採用するかは未定。 これは8月3日にタイムスタンプしたverilogファイルでも動作するので、 ハードウェアの記録としては8月3日になるのだと思う。 つまり予定通りに行くとRSA 2048bit(private crt)の性能が約3.1[ms]になる。
そしてモンゴメリ乗算器を暗号プロセッサに、もう一個追加する方向。 この性能改善は、FPGAボードArtyでは面積不足で成功しない可能性も大きい。


8月8日 Verilog版のSnakeCube開発(33)

再び人工的な頭痛で作業ペースが落ちています。 プログラミングが趣味の僕が一時的にプログラム不能になるほどでした。 やはり頭の壊れ懸念されています。
RSA 2048bitの署名が可能な1032bitのSnakeCubeですがRSA 2048bitの署名をするプログラムを作りました。 まだシミュレーション上の結果のみですがRSA 2048bit署名1回、3.18[ms]になりました。 予定の3.3[ms]よりも少し性能が上がったみたいです。


8月6日 SnakeCubeシミュレータのWin版バイナリ公開

暗号プロセッサSnakeCubeを世の中の人に認知してもらうための余興として SnakeCubeシミュレータ(1032bit)のWin版バイナリを、この日記で公開することに。
Windows10で動作するasim.exeとSnamkeCubeのプログラムの ファイルpowmod_odd.scの2つのファイルが入っています。
Windowsのコマンドプロンプトから

asim powmod_odd.sc

と入力するとプログラムが実行されて終了時のA,B,C,Dのレジスタが表示されます。 Aレジスタの値が、べき乗剰余演算の演算結果で、サンプルデータは OpenICF3公式サイトのシミュレータのページにある べき乗剰余演算(奇数)のコードと同じです。
ただ、それだけを試してもらうための公開バイナリです。 verilogから実行形式を作っているわけではなくて、暗号プロセッサの動作を人が考えて作ったものです。 特にモンゴメリ乗算器が1サイクルで演算を完了する仕様バグがあるので、正しいコードなら 正しい演算結果になるという仕様。暗号演算器(モンゴメリ乗算器)の部分は疑似コードなので リバースエンジニアリングをしても、疑似コードです。 このSnakeCubeは改良型モンゴメリ乗算を演算できるような専用命令を既に実装していますが、 公開コードの中には改良型モンゴメリ乗算ではなくて、普通のモンゴメリ乗算のコードで演算しています。 開発中のためプログラム仕様も今後変更される可能性があります。 シミュレーションを実行するパソコンは、壊れてもいいような安全なパソコンを推奨します。
SnakeCubeで楕円暗号も演算できます。将来的には、このシミュレータが楕円暗号の 特許が絡むような高速なコードを、いち早く取り込むことに役に立つとか、 脆弱性があるとか、ないとかの議論に使われるとか、などを考えていたります。

C言語版SnakeCubeシミュレータ(2020年8月6日)


8月6日 動画配信向けのXilinxのFPGAカード

動画配信向けのPCIeアクセラレータ Alveo U30を発見。 オープンソースのffmpegに対応しているとか。 動画配信で使い終わった頃にSnakeCubeをインストールして SSLアクセラレータにできないか、ちょっと思ったり。 SSL証明書の秘密鍵がCPUのキャッシュ上にあるときに、他のプロセスが読み出せるみたいな問題も、 解決できると、良さそう。 秘密鍵の漏洩が万に一つでもあってはいけないという用途では難しいかもしれませんけど。

SnakeCubeをArtix-7に実装して周波数を上げるのに問題となっているところが、わかっています。 UltraScale+はArtix-7よりも効率が上がるかもしれないと思っているのです。


8月5日 Xilinxの開発者コンテスト

Xilinx(ザイリンクス)と Hackster.io が共催する開発者コンテストがあるようです。
ザイリンクス アダプティブ コンピューティング チャレンジ
僕もSnakeCubeでエントリーできないか考えました。参加資格に法人設立から8年以内とあったので断念せざるを得ませんでした。 僕の株式会社iCanal(←OV SSL証明書)は設立から14年なので。
また個人でのエントリーもできるようなのですがオープンソースにすることが必須なのでSnakeCubeでは無理なのです。
参考までに8bit CPU ICF3-Z Zeviosは 制限の緩いオープンソースライセンスなので、どうぞ。
データセンターがXilinxのPCIeカード Alveo U50を、ある目的のために購入して、使わなくなった Alveo U50にSnakeCubeをソフトウエアのようにインストールしてSSLアクセラレータ・カードにするとか。 (SSLアクセラレータ・カードとしてだけだと、ちょっと高価なので)
量子コンピュータによる暗号解読が発覚したときのため、 鍵を大きくできる準備が必要だと思いますが、既にあるAlveoを使うのはいいかもと思っています。 RSA 2048bitのSSLアクセラレータ・カードとして使えるのですが、 必要に応じてRSA 4096bitや、それ以上の鍵長のアクセラレータに書き換えることができるので。
SnakeCubeはCPUと異なり、鍵長に比例した演算器を使ってRSAを演算できるため、鍵長が長くなればCPUより高速ですし、 鍵長が大きくなるとRSAの演算量は膨大なものになるので。 RSAの演算量については、僕のこのブログ が参考になると思います。
(株)iCanalでSnakeCubeというソフトウエアのライセンス販売してみようかとか、そんなことを考えていました。
ただAlveoには不要な部品が多数ついているので、やっぱり不要な部品を削ったものを作るという可能性はあるかも。 秘密鍵を安全にするために、ハードを作ることになる可能性もある。
産業スパイに24時間、まとわりつかれている問題を、どうにかしないと。


8月4日 SnakeCubeの知財を守るため証明書をもらいました

独立行政法人工業所有権情報・研修館によるタイムスタンプ保管サービスを利用しました。 以下のPDFファイルが、発行していただいた証明書になります。(オンラインによる自動発行システム)
「タイムスタンプトークン預入証明書」
RSA 2048bit(復号化)が演算できるSnakeCubeのverilogファイルのハッシュ値、合成結果の画像、 合成条件を記載したPDFファイルを作成しタイムスタンプをしました。
この他に2つほどRFC 3161のタイムスタンプで証拠を残しています。

このタイムスタンプには「アマノタイムスタンプサービス3161」を使っています。 署名されたPDFに時刻の精度が0.5秒とありました。 RSA暗号の鍵長が長くなると精度を保証するため高速なRSA暗号のハードが必要になるのかもと、 思っています。 SnakeCubeはRSA暗号の鍵長が長くなってくるとCPUよりも高速になるので、 こういったタイムスタンプで役に立つことはあるかもしれません。

2020年8月5日追記
タイムスタンプの精度の定義を知らないので、あまり正しくないことを言ったかも。 タイムスタンプの時刻を受け付け時間にすれば、署名の計算時間が長くなっても、いいのかもしれません。 PDFを開いてタイムスタンプをすると数時間、PDFを開きっぱなしにしておけば、タイムスタンプが完了するとか。 AdobeAcrobatは、各国の事情に応じたタイムスタンプの方式をプラグインという形式で実現しているから、 国が決めれば、どうにでもできるという範囲は、広いのかもしれません。 世界標準のほうが普及すると、国だけでは決まらないですけど。


8月3日 RSA 2048bitの暗号プロセッサがFPGAの実機で動作!(3)

XilinxのEDAツール、Vivado(2020.1)の論理合成はSynthesisが8種、Implementationが29種なので 合計8×29=232ケースの論理合成が可能。 RSA 2048bitが演算できるSnakeCubeを250MHzの条件で232ケースの論理合成をした結果、 3ケースが250MHzを達成しました。


8月3日 RSA 2048bitの暗号プロセッサがFPGAの実機で動作!(2)

250MHzを達成しました!昨日の速報では計算上、まだ250MHzが達成されていない実装を250MHz動作させました。 合成オプションを探っているうちに250MHzで動作するものが合成できました。 再度、実機で250MHzで動作させて正しい計算結果であることを確認しました。 下の図が、今回、250MHzを達成したときのVivadoの画面。 合成に成功したものが1つあることが画像からわかると思います。

図をマウスでクリックすると拡大されます



8月2日 RSA 2048bitの暗号プロセッサがFPGAの実機で動作!(1)

RSA 2048bitが演算できる暗号プロセッサSnakeCubeは 僕が発明した方式の暗号プロセッサです。高性能、高効率なアーキテクチャです。XilinxのFPGAの実機により検証されました。 これまで1032bitのSnakeCubeと呼んでいたもの。

FPGAボード : Arty
FPGA : Xilinx XC7A35TICSG324-1L

Artix-7のスピードグレード -1なのでローエンドに近いFPGAです。
FPGAで動作した周波数はモンゴメリ乗算器 250MHz、暗号プロセッサ31.25MHzです。 まだ1日かけて作業しただけなので十分には性能を出しきれてないかもしれません。 250MHzは1サイクル=4nsです。Xilinxのツールの計算は4.045ns 4.033nsなので、少しオーバーしていますが、 実機で250MHzで動作させて正しい計算結果を出力しています。暗号プロセッサのほうは、まだかなり余裕があるので 暗号プロセッサの周波数は31.25MHzから35.71MHzに性能を上げることができるかもしれません。 RSAの性能はモンゴメリ乗算器の周波数を高速にするほうが有利なので、暗号プロセッサの周波数を無理に上げることはないのですが。
このXilinxのFPGAでRSA 2048bitを計算する時間ですが約3.3[ms]の予定です。 2年前、Webサイトで3.2[ms]の試算をしていましたから、予想通りの性能になりました。 モンゴメリ乗算器の周波数が2年前より2倍になっているのですが、 モンゴメリ乗算器を2個から1個に減らしているので、結果的に予想通りなったということになります。
SSLアクセラレータとして使うにはFPGA上に通信回路を搭載する必要があり、モンゴメリ乗算器を2個から1個に減らす必要がありました。 通信回路を搭載しなければモンゴメリ乗算器を、もう1個、追加できるだけの面積が残っていそうです。 通信回路なし、モンゴメリ乗算器1個で約60%の面積です。頑張れば、モンゴメリ乗算器2個でも通信回路を搭載できるかもしれません。 参考まで、SSLアクセラレータの商品化を目指しているため、暗号プロセッサには、演算中に次の演算データを転送できる機能が 既に実装されています。
XilinxのEDAツールが良かったおかげで1032bitのSnakeCubeが1日の作業で、ここまで来ました。 配置もEDAツールに任せて性能が出ました。巨大演算器もEDAツールでうまくいくのか、まだちょっと気がかりですけど。 専門家以外の人に説明をすると、僕の作っているverilogファイルは、 20年前のお絵描きソフトを使って論理ゲートレベルの設計図を作成してから、verilogに直しているので、 あまり論理合成は使われていません。EDAツールは配置、配線のみを利用するという使い方をしています。 作成したSnakeCubeのverilogファイルを、いろいろなデバイスに移植するために、 論理合成を増やしていくことは、あり得ます。

今後、この暗号プロセッサSnakeCubeの高性能、高効率を活かして、商品化の目途を立てていきたいと思います。 普通には大企業で税金を使いながら開発されていた商品です。 それが、僕1人よって激安な開発コストで商品化されるかもしれないのです。 僕1人で激安に開発できた理由は、いろいろあります。滅多にあることではないと思っています。 ぜひ、僕を応援してください。

下図はRSA 248bitが計算できるSnakeCube(1032bit)をArty に実装したVivadoの画面です。

図をマウスでクリックすると拡大されます


8月1日 96bitのSnakeCubeがFPGAの実機で動作しました

2日前に48bitのSnakeCubeの実機動作に成功していますが、96bitのSnakeCubeでも実機動作に成功しました。 使用したFPGAのデータシートにはDSPの最大周波数は290MHzと書いてある。 SnakeCubeは250MHzで動作したのでDSPの限界付近?まで動作したと言えるかも???
DSPの構成を変更すると464MHzまで動作する見たいなので、機会をみて、考えるのかも。 でも次は1032bitのSnakeCubeを実機動作させたいと思います。 規模が大きくなると合成でうまくいくのか、わからないので、手で配置することを 考えていましたが、配置もEDAツールに任せてみて、動作するなら、それでもいいか。


7月31日 Verilog版のSnakeCube開発(32)

現在開発中のSnakeCubeはCmod A7を SSLアクセラレータにすることを目標にしてきました。まだ、どのFPGAボードにするのか決定していませんが、 Cmod A7のような小型のFPGAにSSLアクセラレータを入れるためにモンゴメリ乗算器の構成を面積重視の SnakeCubeにしています。誰か他の人が、SnakeCubeの性能重視の構成で、 僕のモンゴメリ乗算器より高速なものをXilinxのFPGAに実装できると言う人が出てきそうで 気になっています。僕は基数を2^17にしていますが、2^24のSnakeCubeを作ることはできますが、 小型のFPGAボードに入るか、否かのところで2^17を選択しています。
もう一つ、Cmod A7はローエンドに近いFPGAですが、XilinxのハイエンドのFPGAにはローエンドのDSPよりも、 若干高機能です。Cmod A7は3入力加算ですが、ハイエンドは4入力加算ができるので、 高速化が期待できるように思っています。
記録よりも商品化が優先になっているのです。


7月30日 48bitのSnakeCubeがFPGAの実機で動作しました(3)

(2)の続きです。
クロック周波数が正しい値になっていることを青色LEDの点滅で確認しました。 モンゴメリ乗算器は250MHzで動作していると思われます。 YouTubeにSnakeCubeが動作した動画をアップ


7月30日 48bitのSnakeCubeがFPGAの実機で動作しました(2)

(1)の続きです。
FPGAボードの右上のリセットボタンを押して離すと、RSA暗号の演算が実行されます。 ボタン2(BTN2)を押すと、最上位バイトが表示されます。続いてボタン0とボタン1を 交互に押していくと、次のバイトが表示されます。SW3をONにするとbit3が青の点滅をします。 SW3はまだ実装されていませんが、これから実装してクロック周波数の確認に使います。

図をマウスでクリックすると拡大されます

7月30日 48bitのSnakeCubeがFPGAの実機で動作しました(1)

RSA暗号を計算させて正しい結果をFPGAボード上のLEDに表示させることに成功しました。
うれしい。^^)v
XilinxのFPGAを搭載したArtyで動作させました。 まだ論理合成をするとタイミングエラーの表示がでますが、マルチサイクルの転送のところで出ているので、 気にせず、FPGAの実機で実行させました。 モンゴメリ乗算器のマイクロコントローラ内部で若干、タイミングエラーになっていますが、 正しい結果が計算されました。 コントローラ内部のタイミングエラーなので改善の余地はあります。
一応、動作した演算器の周波数は250MHzですが、FPGAに慣れていないので正しい保証はありません。
2年前の試作で125MHzで動作する試算をしていますが、 2スレッドにして2倍以上の周波数が出るように設計したつもり。2倍の周波数で動作している感じ。 48bitのSnakeCubeなので性能の評価は、まだ出せないという状態です。


下図は今回、SnakeCube(48bit)をArtyに実装したVivadoの画面です。

図をマウスでクリックすると拡大されます


7月29日 Verilog版のSnakeCube開発(31)

進捗報告のみ。SnakeCubeの計算結果をFPGAボード上のLEDに表示させる回路を追加しました。 LEDは8個しかないので2進数で1バイト分の表示しかできませんが、ボタンを押すと次の1バイトが表示される回路です。 追加したSnakeCube回路に対して、ボタンの押し下げもシミュレーションできるようにして、 シミュレーションしてみました。 1032bit版のSnakeCubeでLEDから計算結果を全部取り出せることが確認できました。
暗号プロセッサのEND命令のバグが見つかったので、まずはEND命令のバグを対策します。 END命令後の数命令を実行するバグ。 これまでのシミュレーションで、このバグが見つからなかったのはEND命令を実行したところで シミュレーションを終了させていたから。


7月28日 SnakeCubeの性能検証まで、あと少しです

SnakeCubeは高性能、高効率なアーキテクチャです。それをFPGAで検証するべく作業をしています。 性能の検証だけ、先にしようと思っています。そのため演算結果をFPGAボード上の LEDに表示させる回路を簡単に作ったのですが、急激に妨害が増え、悩まされています。 Windows上で走るXilinxのプロセスを勝手にサスペンドしてしまうなど。
妨害されることは、最初から想定していました。 このため複数のOSで動作する開発環境を作ってきました。 現時点ではWindowsによるSnakeCubeシミュレーションの妨害に集中しているようです。

2020年7月28日追記
この日記をSNSで拡散したところ、すぐにシミュレーションの プロセスが正常に動作するようになしました。SNS拡散効果があったということかも。 (特に意味のある話ではありませんが、今日のスラドにツイッターアカを大量に削除みたいな記事があったけど、、、)


7月27日 中国で学生が64bit CPUを作ったというニュース

「中国科学院の大学生が9か月で64ビットプロセッサの設計に成功」
中国語の記事は読めないので機械翻訳を読んでみました。高性能なCPUですが教育用みたいです。 記事に

中国ではプロセッサチップ設計の人材が深刻に不足しており、そのような人材のトレーニングスケールとスピードをいかに高速化するかは、中国において緊急の問題です。

と書いてあったのは印象的でした。 今の僕は、高性能、高効率な公開鍵暗号の論理設計をしている。多分、世界最高クラス。 レイテンシ性能やスループット性能が最高と言っているのではなくて、高性能で高効率という分類で最高。 多少、曖昧な分類での最高ですが、次世代ICカードに適しています。まずはSSLアクセラレータを作っていきますけど。

そして、今の作業は、サイバー攻撃でシミュレーションが誤動作するため、 もう一台、Windowsパソコンを準備するという作業。 12年前にドスパラで買ったパソコン、ヤフオクの中古CPU(E8400)に換装している。 GPUは、やっぱりヤフオクで買ったnVIDIAの8400GSなのですが、ファンを止めるネジが壊れている安物。 CPUファンが一度、壊れたのでサイズの合わないファンに付け替え。 17年前のHDDと20年前のHDDにWindowsをインストール。1日潰れそう。
中国の加速率300%に対して日本(僕)はマイナス2000%くらの加速率だと思う。 今回の中国CPUは教育用だから、という話はあるかも。


7月27日 Verilog版のSnakeCube開発(30)

長時間Verilogシミュレーションをしています。 Verilogシミュレーションの結果を誤らせるようなサイバー攻撃(推定) により作業が停滞しています。
1024bitの計算結果のちょうど(魔法の?)中継ブロックの 当たりの1bitが違っている。
一見すると中継ブロックがバグっていることを予想させるような 場所なのだが1bitだけ間違うというのは、ちょっと難しい。 一瞬でも僕の青ざめる顔を見たかったのかもしれない。
そして間違っていたのは、C言語による期待値のほうだった。 C言語の期待値プログラムで再現してみると、正しい期待値が計算された。 宇宙線によるソフトエラーやverilogのバグの可能性はある。
僕はサイバー攻撃だと思っている。 そしてSnakeCubeは正しい値を計算できているので、安心しています。 もう少し原因を調査した後、作業を次に進めていきます。
ところで今日、椅子が壊れたので、これも作業を遅延させる要因になりそう。 壊れた椅子を針金とテープでグルグル巻にして修理して使っていたもの。 壊れやすい状態ではあったが、ここで壊れるのか。 遠隔から椅子にヒビを入れる魔法でも放ったのかと。
完成が近づいた頃に、完成した場合の影響を判定する時間が必要になるのかもしれない。 自然故障に見えるような、爆弾をいくつも、準備しているようにも感じた。 爆弾の真偽はわからないが、判定時間を稼ぎたいというのは真実だろう。


7月26日 Googleの話をしにくる不信な通信

Googleからの連絡というわけではないのですがGoogleの話をしてくるようです。
非合法な通信回線を使った連絡は、一切受け付けていません。
僕のほうの状況ですがSnakeCubeの性能検証が、あと少しのところまできています。 性能検証が終わるまで、あまり動けない状況です。しかし連絡などは受け付けています。
昨日は、遠隔制御により眠らされていました。あまり作業が進んでいません。 数日で終わる作業が10日以上かかるという状態です。 そして遠隔制御を振り払うことに、かなり大きな時間が割かれているのです。


7月25日 Verilog版のSnakeCube開発(29)

進捗報告のみ。XilinxのFPGAに付いているクロック生成部品を取り付けました。 2種類のverilogシミュレータ(Xilinxとicarus)で通常版のクロック部品と、 シミュレーションを高速化するためのクロック部品の2種類でシミュレーションをしました。 合計で4個のシミュレーションをしたのですがicarusで高速化版のクロックを使った場合だけ、 計算結果が間違ったものになりました。
このシミュレーションでは演算器はプロセッサの8倍の周波数で動作しています。 演算器の演算結果をプロセッサが受け取るところで問題が発生していました。 icarusで高速版のクロックを使った場合、1サイクル間違ったタイミングのデータを受け取ってしまっているのです。
原因は演算器のクロックがプロセッサのクロックに対して1psずれてしまっている。 icarusでXilinxの高速化版のクロックライブラリを実行してクロックを生成させると小数点の端数の問題で 計算誤差が出るみたいです。

参考までに、シミュレーションではなくて現実でもクロックは100psくらいずれる。 この問題はディレイチェックでミニマム保証するようにするので現実では大丈夫。

上の図はicarusの通常版クロック、正しく'3B'のデータを受け取れている。 下の図はicarusの高速版クロック、次のサイクルの'BC'のデータを誤って受け取ってしまっている。

図をマウスでクリックすると拡大されます


7月24日 verilogコンパイラは仮想マシンのコード生成していた

頭が痺れて作業があまり進んでいませんがオープンソースのverilog、 icarusではシミュレーション用にコンパイルすると仮想マシンのコードを生成していることを知った。 トラ技 付録のDVDに収録されていたicarusの説明文にそう書いてあったので、 調べてみるとicarusが仮想マシンのアセンブラのようなコードを吐き出している。

--- 仮想マシンが実際に役に立っている。 ICF3-Zの仮想マシン機能も、こんな感じで、うまく使えることがあるような気がしたのでした。

トラ技のDVDを引っ張り出すことになったのはicarusのシミュレーション結果が Xilinxのシミュレーション結果と異なっていて、icarusの動作を疑ったため。 Xilinxが提供しているシミュレーションライブラリはicarusをサポートしていないので、 念のための確認程度に。
Xilinxのクロック生成部品(ライブラリ)を追加したところで、上記のように、 少しハマったことも、作業が遅れている原因。


7月22日 暗号プロセッサに似たCPU SnakeModoki(3)

(2)の続き。SnakeModokiの用途を考えたのですが、 署名端末がとても良好な用途。 これまでICF3-ZとOpenICF3を組み合わせた方法で署名端末を作るといいかと思っていました。 どちらもオープンなのでオープンならではの開発ができることがメリットでした。
SnakeModokiはICF3-Zにクローズドな暗号演算器を付けてしまったので、 全体としてクローズドですが、僕1人の利権で作れるので、 署名端末が安価にできるでしょうという予想。 ICF3-Zは8bit CPUなので32bit CPUを使うよりゲート面積が小さく、 その分を暗号演算器に回せるので、面積的に有利。このタイプの暗号演算器は 僕の専門なので、多分、良さそうですし。
OpenICF3による署名端末を否定しているわけではなく、 オープンのメリットが大きいのであれば、それでもいいのかもと。
OpenICF3は実績のある論理ですが、SnakeModokiは、作ってみないとコストパフォーマンスが わからないところがあります。でも、面積的なコストパフォーマンスはSnakeModokiかもしれない。 OpenICF3では必要以上の性能になっても、性能を抑えることが難しい。

7月23日 6:00AM追記
署名端末ではハッシュの演算が必要で32bitの演算が多くなるのですが、他の8bit CPUより 32bit仮想マシンを作れるICF3-Zは有利か。SnakeModokiの暗号演算器はRSA暗号の性能に特化していますが、 楕円暗号の演算も可能。署名端末の要求性能(署名時間)はRSA暗号でも楕円暗号でも同じはずで、 SnakeModokiの楕円の性能が悪くても楕円暗号はRSA暗号より軽い処理であるので、問題がないという。


7月22日 Verilog版のSnakeCube開発(28)

進捗報告のみ。 体中に遠隔制御が入って動けなくなる一歩手前の状態とか、眠気が増強されている状態が多い。 頭痛の頻度が減ったので、少しは作業は進むが普通の人の20%くらいの出力。
FPGAデバイスでVerilog版のSnakeCubeを動かすためクロック周辺の作業をしていました。 SSLアクセラレータにするFPGAボードをどれにするのか、まだ決まっていませんが、 ボード上に100MHzの発振器を持つやつと12MHzの発振器のやつとあって12MHzの発振器では、 同じFPGAのデバイスでもクロックの誤差が大きいみたい。その分、性能を下げる必要があるのかも。


7月21日 暗号プロセッサに似たCPU SnakeModoki(2)

(1)の続き。 もう少し解説をすると、SnakeModokiはランダムアクセスの性能が悪いが、 シーケンシャルな転送が高速なメモリを効率よく使える点がいい。 そしてモンゴメリ演算器には鍵長の制限はなく、 メモリがあれば限りなく大きな鍵の公開鍵暗号を演算できる。 またメモリ転送性能とゲート面積を考えながら最適なCPUを設計できる。
SnakeCubeでは鍵長と同じサイズのモンゴメリ乗算器になって、 それでも乗算器のサイズで調整は可能だが、SnakeModokiほど 調整範囲は広くない。
僕の頭には、産業スパイが24時間住みついているから、 この日記のように解説をしなくても、漏れてしまう問題があるので。


7月21日 暗号プロセッサに似たCPU SnakeModoki(1)

暗号プロセッサSnakeCubeが、ようやく出来上がったばかりですが、 SnakeCubeの高効率なモンゴメリ乗算器のビット幅を小さくして普通のCPUに搭載した SnakeModokiを考えた。modoki(もどき)とは日本語で偽物という意味。 ちなみにサソリに似たクモ、サソリモドキという生き物が実在しているみたい。
トランジスタ数が非常に少ないことが特長のICF3-Zに、 高効率なモンゴメリ乗算器を搭載したCPUが作りたくなったのです。
非常に少ないトランジスタ数であるにもかかわらず、 高速にRSA暗号ができる競争力のありそうなCPUになりそうだと思ったから。 SnakeModokiはクローズドです。
ざっくり説明をするとSnakeCubeは多数のDSPを使って並列に演算をするのですが、 それをSnakeModokiでは1個のDSPでやってしまおうということです。 並列に動作させる技術を除いた技術レベルの低いモンゴメリ乗算器(DSP)ということです。
しかしながら、扱いのいいモンゴメリ乗算器になりそうなのです (←これ重要)。 というわけでSnakeModokiも、将来、時間があれば作りたくなった。 暗号プロセッサに似たCPUと言ったのですが、使い方は暗号プロセッサとしても使われるのかも。


7月20日 Verilog版のSnakeCube開発(27)

進捗報告のみ。 気分が悪くなって寝た。その後、熱にうなされ続けた状態で目が覚めた。 このまま脳が損傷していってもSnakeCubeの所有権が移動しないので、問題となることが予想されます。
1年半前、演算結果をUSBのシリアル通信でFPGAから取り出すため、 送受信回路を作っていました。そして通信回路の一部として8bit CPU ICF3-Zを作ったのです。 その後、もっと小さい8bit CPU WZetaを作り、 USBシリアル通信の作業を進めていました。そしてエアコンが故障してエアコン交換のため、 エアコンの下に置いてあった開発用のパソコン13台を撤去して、部屋を移動する作業をすることになった。 この後も、トラブルが続き進捗を遅らされ、USB通信回路の開発を中断、 暗号プロセッサを先に完成させる方向に方針を変更しました。
そして、今、暗号プロセッサが出来上がり、シミュレーションで正しい結果が計算できるようになりました。 USBのシリアル転送の回路を完成させるには、まだ時間がかかるので、 取り急ぎ、LEDに演算結果を表示させる作業を進めています。


7月19日 8bit CPU ICF3-Zのデータ転送

どういうデータ転送が遅いと言っているのか、いま一つ、わからない。 ポインタがないという人は、説明書を良く読んでないのかもしれない。 データメモリ64KBにポインタでリードも、ライトもできる。 他の8bit CPUより高い周波数で動作するアーキテクチャなので 転送に必要な命令数は多いが、性能は悪いというほどでもない。(多少、悪いかもしれない)
I/Oについて言えば、INPUTOUTPUT命令があって同一の ポート番号(0~255)に対してINPUT命令とOUTPUT命令が同時に動作する。 ポート番号を上位4bit、下位4bitにわけて、上位4bitをINPUTデバイスの指定、 下位4bitをOUTPUTデバイスの指定に振り分けると、16個のデバイス間で、 おおよそ1サイクルで1バイトの転送が可能。 説明書(ICF3-Z 命令セットアーキテクチャ仕様)の一番最後にサンプルコードがあると思います。
参考までに言うと、INPUTOUTPUT命令は6bitのオペコードの28番を割り当てているのですが、 オペコードの番号の割当を工夫することで、デコードのトランジスタ数が少なくなるように考えたもの。 INPUTOUTPUT命令があるのではなくて、INPUT命令とOUTPUT命令が同時にONになるような番号。


7月18日 Verilog版のSnakeCube開発(26)

1032bitのVerilog版SnakeCubeが出来上がりました。 とりあえず1つのデータでVerilogシミュレーションをして正しい結果が計算されました。 icarusだと1024bitのべき乗剰余演算のシミュレーションに3時間10分。 Xilinxのxsimでは22分。テストを連続して行うシステムはicarusでしか動作しないので、 どうしようかと、考えているところ。
ここ数日、頭痛は減りましたが、微妙に頭を悪くされていている。 文字認識能力が低下したり、日本語が読めなくなったり。 6文字以上のカタカナをまともに読めないなど。 1ドル110円で、ドル安になると、どうなるとか、普通の人だと思考するまでもなく、 答えが出るはずなのだが、じっくり考えないと、答えがでないなど。 痛くないが、結構、問題。妨害の量としては、まだ大きいという状況。


7月15日 僕と同世代の早稲田大学の電気工学科に平山は3人いる

次世代ICカード(SmartCard)で有望な技術を発明して、実装が進み、 僕も有名になってきたように思っています。
間違いやすい平山が、僕の他に2人いるので、言っておいたほうがいいかもと思ったのです。
1人は、一学年上の平山さんでIBMに入社されたところまでは知っています。 実際に話をしたこともある。僕はIBM互換の暗号LSIを作っていますから 僕がIBMに転職したようにも見えて間違いやすい。
もう1人は、二学年下の平山さんで早稲田のコンピュータ・サークル(MIS.W)に 所属しているのではないかと思います。
僕がコンピュータ・サークルに入っていたのではないかと思う人も多いので間違いやすい。そして僕のいた研究室はMIS.Wの人がいっぱい。
参考までに、僕が入っていたサークルは宇宙航空研究会。今は知りませんが、当時は理工学部最大のサークルなのに部室が1部屋の半分。僕は、大学で初めて飛んだ人力飛行機のプロペラを作った人です。早稲田祭のプラネタリウムの制御基板を作った人でもある。


7月15日 Verilog版のSnakeCube開発(25)

大きく進捗しました。96bit版のSnakeCubeは24bitのブロック、 4個で構成されています。4個とも同じ物だったのですが、 2個目のブロックを特殊なブロックに交換しました。 加算器などでは、ビット幅を大きくしていくとキャリーの遅延が大きくなっていきますが、 これは、既にSegmentation adderによって一定値に抑えられています。 キャリーの遅延ほどではありませんが、ビット幅を大きくしていくと 最下位ビットからのブロッドキャストの遅延のため周波数が下がってしまいます。 これを特殊なブロックで、中継してやることで、周波数が下がらないようにするのです。
特殊なブロックは、僕のブログ 「わかりやすいICF3-Fのモンゴメリ乗算器の説明」を読むとわかるかも。 参考までにSegmentation Adderとは僕が発明したもので僕の造語です。
Verilogによる大量シミュレーション中ですが、問題なく動作することが検証されました。
これからブロックを追加して1032bitにしていきます。


7月14日 ソフトバンクの速報

ソフトバンクがARMを手放すことを検討しているという速報 ソフトバンクからのコメントは、まだないとのこと。
RISC-VはARMを完全に置き換える可能性がありますが、 ICF3-ZはARMと共存できるCPUなのです。 ICF3-Zは、そのアーキテクチャために、あまり高性能なものが作れないのです。 32bitのARMでは32bitが無駄になるアプリもあるわけで、 ICF3-Zは、ARMでは非効率(or 困難)なところを補完できるCPUなのです。


7月14日 自分の仮想マシン(CPU)を作る

ICF3-Zを使って、 非力なCPU向けのJAVAのような自分の仮想マシン(CPU)を作るのもいいかもと。 僕は、今、忙しくて無理なのですが、基本的にCPUを作るのが好きな人なので、 ついつい、考えてしまうという状況。
何故、またこのようなことを言っているのか。 それは、ICF3-Zの動作周波数が、他のCPUと比べて高いので、 圧縮命令(ユーザー定義命令)で作られた仮想マシンが、 そこそこ使える性能になるのではと思ったから。 ハードを知らないソフト屋でもICF3-Zの仮想マシンを作れると思ったからです。
Googleが支援するSkyWaterのオープンなASIC開発環境でRISC-VのPicoRV32が 実装されるそうです。PicoRV32をXilinxのFPGAに実装すると乗算命令付きで 110MHzという結果がネット上にありました。 スピードグレードが不明でしたが、もし仮に最も高速なスピードグレードの デバイスだとして、最も遅いスピードグレードでは、87.5MHzだと勝手に思うと。 ICF3-ZはPicoRV32の2倍の周波数で動作するということになる。 またPicoRV32では1命令の実行時間が3~6サイクル。 ICF3-Zに換算すると6~12サイクル相当。 ICF3-Zは8bitですが32bitの仮想マシンを作っても、まぁまぁな性能のCPUになるのではという 予想。
AVRについては、アーキテクチャ的に 2倍の周波数という予想 なのです。
予想がはずれることはあると思いますけど。


7月14日 スタックポインタの研究(2)

昨日の日記の続き。 ICF3-Zの圧縮命令(ユーザー定義命令)の機能を使ってPUSH命令を作りました。 ただ公開している説明書に、まだ書いてない機能を使っていました。 その機能は、公開されている設計図とverilogには入っていました。
その機能は定義する命令コードの1サイクル目、 オペランドのbit7-4で指定される汎用レジスタが、 既にプリロードされていること。
レジスタR33,R32(スクラッチパッド)を16bitのスタックポインタとする PUSH命令。PUSHする汎用レジスタの番号はオペランドのbit7-4で指定。 スタックポインタは+1される。

R(N);N=32;B=REG
R(N);N=33;B=REG;ADDR=B;A=ANS
C=REG;ADDR=B;R(REGADDR);ONE;STORE;A=ANS
RETURN;ADDR=C;CY;A=ANS;R(N);N=32;STORE
R(N);N=33;STORE

5命令ですが圧縮命令では、このコードにジャンプするのに2cycかかるため PUSH命令の実行サイクルは5+2の7cycになります。
PUSH命令でスタックポインタを-1するコードは

R(N);N=32;B=REG
R(N);N=33;B=REG;ADDR=B;A=ANS
C=REG;ADDL=N;N=0xFF;ADDR=B;R(REGADDR);STORE;A=ANS
R(N);N=32;STORE
RETURN;ADDL=N;N=0xFF;ADDR=C;CY;A=ANS
R(N);N=33;STORE

6命令で実行サイクルは8cycです。

スタックポインタをDレジスタ(8bit)、スクラッチパッドの後半をスタック領域とする PUSH命令。PUSHする汎用レジスタの番号はオペランドのbit7-0で指定。

COPR;R(N);RETURN MOV;ADDL=N;N=0xFF;ADDR=D;R(ADDR);STORE;D=ANS

2命令で実行サイクルは4cyc。Dレジスタをスタックポインタにしているので 除算のようにDレジスタを必ず使うDIV命令ではDレジスタの値を一度退避して、命令の最後で復帰させる。
ICF3-Zは高い周波数で動作する。 AVRの2倍の周波数という予想 なので、実行サイクル数は多いように見えるのですが、 圧縮命令(ユーザー定義命令)でCPUを作っても、使える性能になりそうです。
PUSH命令を実装してみて我ながらICF3-Zの命令セットが良くできていると思ったのでした。


7月13日 スタックポインタの研究

CPUが好きな人向け。8bit CPUICF3-Zに スタックポインタが無いという問い合わせが。 ネットを調べるとARMは汎用レジスタ31番、RISC-Vは汎用レジスタ2番を スタックポインタとして使うコーディング規約があるだけみたい。 ICF3-Zは全ての汎用レジスタ(スクラッチパッド含む)をスタックポインタとして使えます。 後でコーディング規約を作ることになるのか、わからないですけど。
問い合わせ内容
ICF3-Zはスタックポインタがないのか。 レジスタで16bitのスタックポインタを実装すると遅いのではないか。


同じ8bitのAVRや8051を調べるとスタックポインタが存在していました。 時間の都合でAVRだけ見てみるとPUSH命令の実行に2サイクルかかると書かれていました。 ICF3-Zの周波数はAVRの2倍という予想があるので4サイクル相当です。
ICF3-Zで16bitのスタックポインタで最も性能の悪いPUSH命令を 作ると8サイクル。7サイクル。 最も性能のいいPUSH命令は5サイクル。4サイクル(スタック領域としてスクラッチパッドの後半を使う)
ICF3-Zのスタックの性能は、それほど遅くない。


7月12日 Verilog版のSnakeCube開発(24)

頭痛で作業が進んでいません。 昨日の日記に、Verilogで書かれた48bitのSnakeCubeが動作するようになったことを書きました。 これを96bitに拡張しても動作することが確認できました。 まだ中継機能がついていないのでbit長を大きくしていくと周波数が落ちてしまいます。 これから96bit版に中継ブロックを入れます。中継ブロックは、何度でも挿入できるので、 どんなにbit幅を大きくしても、周波数は下がらないようになります。 1032bit程度では、中継ブロック1個入れれば、足りるような気がしてますが。
連日の頭痛が止まっていませんが、頭の壊れが、これ以上進行すると問題になります。
ネット上に、僕がICF3(1999年)の本当の開発者ではなく、手伝っていただけみたいな、 うわさが目に付いています。そういったデマを信用しないでください。
デマや破壊活動を続けても、僕が死守することを決めています。 他者がICF3の利権強奪に成功することはなく、デマや破壊活動では、この国に損害しか出ません。 この国の将来について考えていく方向でお願いします。
売国奴は、この国に損害が出ても、 他国に褒められるということに注意してください。


7月12日 Google、半導体チップ設計のオープン化支援

GIGAZINE記事
Googleが半導体チップの設計に必要な「PDK」をオープンソース化するプロジェクトを支援
NDA無しに使えるみたいです。 この記事を読んで調べたのですがセルライブラリがあるみたいなので、 8bit CPU ICF3-Zが作れそうです。 僕は、今ちょっと、時間がありませんが、OpenICF3も一緒に実装して、GoogleのIoTボード向けに作るとか。 その後、署名端末にすれば、商業だけで立ち上がる可能性もありそうです。
記事のPDKはSRAMも予定されているのでSRAMが使えるようになると、便利かもしれません。 SRAM1bitの面積と、普通のDFF 1bitの面積のだいたいの数字が出ていて、 20倍くらいSRAMのほうが小さいのです。プログラムメモリを食うICF3-Zにとって、 SRAMは役に立つだろうと思っています。
小型のRISC-Vの実装が、多数出現していますが、32bit CPUの32bitが無駄になる 用途では、ICF3-Zは面積性能に優れるので、ICF3-Zが目的に合うものになることが しばしばあると思います。32bitアプリもICF3-Zで仮想マシンを作れば、 多少遅いですが動くので、多くの用途で使えるCPUとなるように思っています。 また仮想マシンで24bitCPUにしてデータメモリのメモリ効率を上げる こともできます。
参考までに記事のPDKでRISC-VのPicoRV32の実装が進んでいるようです。 PicoRV32は1命令の実行に3サイクル~6サイクル必要です。 ICF3-Zは加算命令などは1サイクルです。条件が合えば0サイクル分岐もできる。 分岐命令後、2サイクルは遅延スロットになるのですが。 遅延スロットに無駄にならない命令が入れば、完全な0サイクル分岐。
PicoRV32をXilinxのFPGA Artix-7に実装して110MHzになったという結果が、 インターネット上で見つかりました。同じArtix-7でもスピードグレード によっては高い周波数で動作します。この110MHzが、どのスピードグレードなのか、 読めませんでしたが、最も遅いスピードグレードであると仮定します。 ICF3-Zは175MHzです。命令密度の違いを考慮して、大雑把なことを言うと、 ICF3-Zのほうが単位時間に3~6倍命令数を実行できます。(ただし演算が8bit)

つまり、8bitのICF3-Zは、より面積の大きいRISC-Vの性能と同様の性能が出せるかも? ただし手間はかかる。一度、手間をかけて作れば、数十年とか、 長い期間使えるので、最終的にはコストパフォーマンスに優れるようになってくる。 FPGAでICF3-Zの実績を積み上げて置けば、Google支援のSkyWaterでASICを作れるか?


7月11日 SnakeCubeの今後の方向

Windows環境でもverilog版SnakeCubeが動作するようになり、一息ついています。 SnakeCubeは、まずXilinxのFPGAでSSLアクセラレータにしていきます。 SnakeCubeの開発で、あまり開発環境に依存せず、コマンドラインによる開発を 進めてきました。これをICカード用のASICに転用できるIPにするのに、 あまり労力はいらないと思われます。
ここでしっかりと設計できれば次世代ICカードが安くできるということだと思います。
SSLアクセラレータで開発したSnakeCubeを同じXilinxの大型FPGAに作り直して、 1999年の世界一(レイテンシ性能)から、もう一度、20数年ぶりに世界一(レイテンシ性能)を目指すのもいいかもと。 これは、タイムスタンプサーバ(RFC 3161)向けの準備として。 世界一を記録するには、かなり大きな鍵長にしないと、世界一にはならないと思いますが。
つまり僕の頭が破壊されて設計が半端にしかできない状況になると、とても困るのです。


7月10日 RISC-Vの動向

Northwestern大学 情報科学 准教授Abhi Shelat氏がRISC-Vについて、 次のように述べています。
「ローエンドプロセッサの使用とコストに関しては、 オープンソースの経済性のため、このチップ(RISC-V)が支配的となる可能性があります。・・・」


7月9日 オープンソースのCPU、ICF3-Zは活躍できる

先月の12日、ICF3-Z初のプレスリリース によって、より多くの人に知ってもらえたと思います。このCPUが、どんなところで使われそうか、 考えながら、日々を過ごしているのですが、昨日のGIGAZINEの記事に次のようなものがありました。
「HDDのコントローラーをハッキングするとデータの傍受やHDD基板へのLinuxインストールが行える」
わかったことは、このHDDはARMとARM互換のCPU 3個を使っている。
MMUがない。(ICF3-Zで置き換えられる)
ARMは、Cortex-M3である。(ICF3-Zに置き換えられる可能性あり)
メモリ空間にDRAM 64MBがある。(ICF3-Zは標準では64KB)

言いたいことは、スペック的に厳しいところがあるが、ICF3-Zに置き換えらないだろうか? ICF3-ZはARMやRISC-Vと比較してトランジスタ数が少なく、安価なので、 このHDDに限らず、多くの用途で、使われるかもしれない。

本当に言いたかったことは、こういった『IoT未満の用途』の市場は、 ICF3-Zが支配的に、なるかもしれないので、備えることを考えたほうがいいかもしれません。


7月9日 Verilog版のSnakeCube開発(23)

トランジスタの技術2020年1月号付録のDVDに入っていたicarus verilogは ソースコードのみで、Windows版のバイナリは入っていませんでした。
圓山宗智著「MAX10実験キットで学ぶFPGA&コンピュータ」CQ出版のDVDには、 Windows版のバイナリが入っていたのですが、、、


7月9日 ZOOMのアカウントを取得しました

今更ですがZOOMのアカウントを取得。何かあれば参加できそうです。


7月8日 Verilog版のSnakeCube開発(22)

頭痛で作業が進んでいません。 7月6日23時ごろCQ出版のWebShopでトランジスタの技術2020年1月号を注文。 7月8日12時には自宅のポストにあったみたいなのですが、 頭痛が悪化して寝ていました。今(7月8日17:50)、起きたのですが、 これから夕食と風呂なので、Windows環境の構築は、その後。 SnakeCubeの発明を早く完成させたいのですが、全然、作業が進んでいません。


7月8日 米中「半導体戦争」が緊迫している

マイナビの記事 「香港国家安全法への米国の対抗措置が半導体業界に重大な影響を及ぼす可能性」
米国商務省が「米国の機密技術が中国政府に転用されるリスク」が高まることを懸念しているようです。
1999年に世界に製品出荷されたICF3 はIBM互換の暗号チップです。このことから、 ICF3やSnakeCubeに米国の機密技術が、なんか入ってないか?と思った人も あったかもしれません。そういうものは、全く入っていません。 米国の機密技術の定義にもよるのかもしれませんが、 それでも問題になるようなことは、ないと思っています。


7月8日 発明の大きさは人類への貢献度(3)

昨日の日記の続き。重大な問題点を説明します。
SnakeCubeに実装される、 この高性能で高効率な、べき乗剰余演算の発明は、 僕1人の発明によるものです。僕の2005年(退職後)から現在(2020年)までの収入は僅か340万円程度です。 年収ではありません。15年で340万円。何かアメ玉を貰っているわけでもありません。 会社に勤めていないので、この発明を手放すと、収入はありません。 この発明を使って、いろいろ稼いでいかないといけないのですが、僕の頭が悪くなると、 今後の設計が、うまくできなくなってしまいます。そして、手放すことができないので、 この国にも大きな影響が出るのです。少なくとも、僕の頭への攻撃を止めさせないと、 大変なことになる。

僕以外の人も、この発明を使える人がいるみたいな、ことにしようと考えている人がいます。 僕しかこの発明の利権を持っていません。 このことは、何度か、ネット上で説明しているので、知っている人の数は、それなりにいます。


7月8日 発明の大きさは人類への貢献度(2)

昨日の日記の続き。この発明はRSA暗号の高速化において、 性能だけで言えば、世界一ではありません。これより高速な方法も発明されていますが、 鍵が大きくなっていくと実装できない問題、実装できても高すぎで実用にならないのです。 僕の発明は、高性能かつ高効率という部門で、世界一だと思っています。 これまで論文などの情報も、調べています。調べ切れていないところはあると思いますが、 他の誰かが発明していれば、常時httpが普及するところで、騒がれていただろうからです。
どうして誰も発明できなかったのか、僕が考えるに、この手の高速化には、 CarrySaveAdderが良く使われるのですが、CarrySaveAdderによる高速化で、 満足してしまったからではないかと思うのです。そこに僕の 「分割加算(Segmentation Adder)」を使うとパイプライン化が進んで、 高性能かつ高効率になる。


7月7日 発明の大きさは人類への貢献度

発明にも役に立つもの、あまり役立たないもの、いろいろあると思います。 人類への貢献度の大きさが、発明の大きさなのだと思います。 青色発光ダイオードを発明した中村さんは2014年にノーベル賞を受賞していますが、 受賞理由が中村さんのWikiに書かれてあります。

高輝度で省電力の白色光源を可能にした青色発光ダイオードの発明

この発明が人類への貢献度が大きいということが、わかります。
さて、べき乗剰余演算(RSA暗号)の高速化の歴史は長く、これまでいろいろな 研究がされてきました。

y = g ^ x mod p

たった、この計算をするだけなのに、実に多くの方法が考え出されています。 これは巨大整数の最下位ビットに1を加算するだけで最上位ビットまで影響する ことが原因であるように思っています。 半導体チップ上に実装すると配置や配線遅延の問題が入り込み、高速化の 問題を難しくするのです。
1999年のICF3 では基数2のモンゴメリ乗算を使っていますが、後継のICF4では 高基数で作ることを検討していました。検討中、IBMの暗号チップを購入する ことになったためICF4は途中で潰れてしまいました。 低基数では周波数を上げることが難しかったことから高基数を検討していました。
2005年に日立を退職後、2018年に自分1人で低基数で周波数を上げる方法を発明しました。 「分割加算(Segmentation Adder)」この方法によって難しかったパイプライン化 が一気に進み、チップ上の全ての乗算器の使用率を50%~70%程度まで、 上げることに成功するだろうと考えています。 低基数のパイプライン化が難しかったということが、 次のブログの「SnakeCubeが高周波数で動作する秘密」のあたりを読むとわかるかも。
巨大整数用四則演算プロセッサSnakeCubeが高速である秘密

僕の発明:

高性能で高効率な、べき乗剰余演算(RSA暗号)の論理ゲート結線構造の発明
(論理ゲートの結線構造というのは、結晶に見せるための、半分冗談)

この発明があるだけで、実際に使われていなくでも、公開鍵暗号を利用した システム(マイナバーカードなど)を、当面使い続けることができるという 期待感によって、無駄な支出が防がれていると思います。 公開鍵暗号を代替する研究も進んでいますが、急いでも安全性の確認は、 確実にできるわけではないので。

次世代ICカード(SmartCard)で、この発明を使うと、とてもいいように思っていますが、 インターネットの安全を守るhttpsや、その他のシステムでも使われることは あるように思います。

要するに僕の発明(SnakeCube)は、人類への貢献度が大きいと思っているのです。


7月7日 Verilog版のSnakeCube開発(21)

頭痛で作業が進んでいません。久々に外に出ました。隣の人の話声は、 普通、意識をせずとも、聞こえてしまうはずですが、音は耳に入っても、 聞き取れていないことに気づいた。頭痛で劣化が進んでいるようです。 一時的なものだといいのですが。
本題に戻るとWindows環境を構築しています。 SnakeCubeはオープンソースではないのでクラウドの開発環境は使いにくいのです。 Windows版icarus verilogの入手のためトランジスタ技術 2020年 1月号を買いました。 付録のDVDにicarusが入っているみたいです。(少し古いバージョンのicarusは、 別のCQ出版の本についていたDVDがあるので、急いでいません)
そういえば6月30日に、トランジスタの技術の編集長が退社されたとか。

2020年7月7日 9:30AM
参考までLinuxの開発環境はインターネットには接続されていません。 Windowsの開発環境も環境導入後はオフラインで利用します。 WindowsのC言語版SnakeCubeのバイナリはインターネットに接続していたことは あったかもしれませんが、公開用のバイナリなので、ディスアセンブルしても、 モンゴメリ乗算器の論理は読めないようになっているので問題ありません。


7月6日 Verilog版のSnakeCube開発(20)

頭痛で作業が進んでいません。しかし必ずSnakeCubeを作ります。 XilinxのFPGAに実装され性能が出るあたりで、 今日、この状況がこれで良かったのか、考えるようにしたい。 そして、その後も、今日、この状況がこれで良かったのか、考えることにします。


7月6日 gab PRO 1年分買ってみた

gabはマストドンに似たSNSです。1年分60ドルをビットコインで買いました。 ビットコインが安いときに買って、現在、少し高くなっている状態で gab PROを購入できたので20%くらい得できたかも。
↓これがgab PROになったアカウント
https://gab.com/zevios
8bit CPU ICF3-Zの話が多いと思います。 マストドンでもフォローできる場合があるみたいなので、もし興味があれば、 フォローしてください。 gabについては少し調べてからのほうがいいと思います。


7月5日 Verilog版のSnakeCube開発(19)

作業報告です。それ以上ではありません。 頭や体の痛みは、あまりありませんが、頭や体を寄生虫に蝕まれるような状態で、 作業はあまり進んでいません。痛まないが、妨害率が高い。


7月5日 CPUエミュレータQEMUとICF3-Z

新しい話はありません。QEMUの技術とICF3-Zが関係するかという話です。
結論を先に言うと、全く関係ありません。
ICF3-Zにはユーザが定義できる命令が最大127個あります。そしてジャンプ命令や、 サブルーチンコール命令も定義できます。この機能によって自分のオリジナルのCPUを作ることができます。 ICF3-Zの命令セットは、ハードウェアが単純な命令しかないため、その単純な命令を使って、 使いやすい命令セットのCPUを作れます。ただ既存のCPUをエミュレーションすることはできず、 決められた形式の16bitコードのCPUになります。
ICF3-ZはCPUエミュレータQEMUというオープンソースのソフトウェアのように見えることはあるかもしれません。 そして数年前に僕自身がQEMU派生させてChrome/ChromiumブラウザのPortable Native Client (PNaCl)で 動作するものを作っていました。 なんと!今でもQEMUのWikiにPortable Native Client (PNaCl) へのリンクが貼られています。ドメインを継続できなくてリンク切れになっていますけど。
ICF3-ZもQEMUもCPUエミュレーションを高速にする技術を持っていますが、技術的に別物です。 ICF3-Zはプログラムコードに直接、エミュレーションするCPUの命令語を置くことができて、 オペコードをアドレスだと思ってサブルーチンコールするハードウェアによって高速化をしています。
QEMUの開発者の1人、Fabrice Bellardさんがブラウザの中でJavaScriptを使って Windows2000を動作させるということをしていましたが、 僕がPNaCl QEMUでWindowsXPをブラウザの中で動作させたほうが 先だったのではと思っています。Youtube動画あるので、よければどうぞ。

Fabrice Bellardさんは、FFMPEGなどいろいろなオープンソースのプロジェクトで活躍されています。 昨年(2019年)にQuickJSという、小さな組込み向けJavaScriptエンジンもリリースされたとか。


7月4日 銀行向け署名端末を考えてみた(4)

(1)(2)(3)は、日記(1)日記(2)日記(3)をクリックすれば読めます。
日記(3)のところで署名端末では乾電池が不要になる話をしました。 乾電池が不要でも時計の時刻を維持するために水銀電池が必要なのではないかという意見。 例の無線通信経由の意見なので、いいと思っていませんが。
脆弱性が無いことを保証するのは難しいのかもしれませんが、時計も水銀電池も不要なのではないかと、 思っています。銀行側のサーバで乱数を生成して、署名端末に送信。 送られてきた乱数を使って返信データを作成すれば、いいように思いました。
参考までにジャパンネット銀行で、もらったトークンは、10年で新しいカード型のトークンに 交換してもらってます。つまり、10年間、正確な時間を維持できる程度には、 時計の品質も、水銀電池の品質も、良くないといけないので、削減できれば、端末のハードは安くできるのかも。 地球環境にも良さそう。
ただUSB接続のチップは信用がなくてもいいので激安なものが使えると(1)で書いたのですが、 10年間動作する程度には、品質の高いものを入手する必要があるように思いました。 (改竄、盗聴は問題がなくても、気分で故障されると問題という話です)


7月3日 Verilog版のSnakeCube開発(18)

作業報告です。それ以上ではありません。 ほぼ1日中、眠っていました。 Verilog版のSnakeCubeシミュレータで大量シミュレーションをしているところですが、 SnakeCubeの開発環境は、サイバー攻撃に備えWindows環境や、その他のOSでも 動作するように考えています。Windowsには標準ではPerlが入っていないため PerlがなくてもシミュレーションできるようにC言語のプログラムで代替しているのですが、 C言語の標準ライブラリではシミュレーションのプロセスの標準入力か、 標準出力のどちらか一方しか操作できず、Perlの便利さを痛感しました。
このためverilogで連続シミュレーションのための仕組みを入れ込むことになったのですが、 verilogの標準関数の$fopenでは、ファイルが存在しているとき、書き込みオープンをすると エラーになってくれなくて困ったのと、$randomが毎回同じ乱数しか生成してくれなくて困りました。
乱数はC言語で生成してコマンドラインでverilogに渡すということで乗り切りました。


7月2日 ICF3-Zで自分のオリジナルCPUを作ると面白い

新しい技術を使って実用性のあるものを作れないか考えている人向け。
8bit CPU ICF3-Zは利用者が自由に 定義できる命令を最大127個作れる。作れる命令は16bit長の命令コードで、 最上位ビットは常に1、オペコード7bit、オペランド8bitです。 サブルーチンコール命令や、ジャンプ命令も、 実装できるため自分のオリジナルCPU(仮想マシン)を作れます。 そしてICF3-Zで作られた仮想マシンは、ハードウェア支援によって高速に動作します。
ICF3-Zの仮想マシン機能(利用者定義16bit命令)をサブルーチンコール命令の 一種として実装することで、実に良くできた実装になっています。 つまりサブルーチンコール命令を作るには、ジャンプ命令を実行すればいいのです。 ジャンプ命令を作るには、サブルーチンのスタックを1つ減らす命令を実行して、 ジャンプ命令を実行すればいいのです。
自分の仮想マシンをarduinoなどのコンピュータに移植すれば、 仮想マシン上で動作するプログラムは、いろいろなコンピュータで動作します。 自分のオリジナルCPU(仮想マシン)を作るのは面白く、価値があることになると思われます。 先日の日記で書いたTTL版のICF3-Zに 仮想マシンを移植することは容易なのでTTLで作ったCPUの世界とつながっていくと思われます。 ICF3-ZはTTLで実装できるCPUとしては高速なので、TTLならではの用途が見つかれば、 TTLのCPUが、売れるようになるのかも。
既存のJAVAとの違いは、何かというと、TTLでも実装できそうなくらい、 非常に小さいCPUで仮想マシンが高速に動作する「ICF3-Zの仮想マシン機能」です。 新しく仮想マシンを作るので、JAVAのAPIの紛争問題も起きません。
命令コードの最上ビットが常に1になっていますが、将来、 ICF3-Z以外の仮想マシンの拡張用として考えることもできます。 パリティつきのメモリは高価なのでパリティビットとして使えば、 安価なメモリで高信頼なものが作れます。


追記
TTLが強調されていますが、TTLがなくても、多くのコンピュータで 動作するということだけでも、オリジナルCPUを作る価値はあるように思っています。 その価値を大きくできるかは、自分で考える必要がありますけど。
ICF3-ZをTTLで作ることを散々考えている理由は、SRAMがとても安価なので 大容量のSRAMを搭載したマイコンを作りやすいから。


7月2日 Verilog版SnakeCube、大量シミュレーションで検証中

AMD 6コア12スレッドのCPUでverilogによるSnakeCube(48bit)シミュレーションを 大量に実行中です。RSA暗号を演算するための、改良型のアルゴリズムを使ったマイクロコードで シミュレーションをすると数分でエラーになったので、何が原因か、 調べたのですが改良型では演算できる鍵長が2bit小さくなることを忘れていただけでした。
エラーでシミュレーションが止まってくれたおかげで、SnakeCubeのverilogが間違った 答えを出力すれば、エラーで止まると確認できました。

左目の眼球を筋肉が外側に引っ張るので、左目をつぶって作業をしたり、日記を書いたりしています。 SnakeCubeは、 すばらしい発明だと思っていますが、まだ僕は、筋肉制御されていなければ、 ならないのでしょうか?このために作業速度は半分も出ていないと思います。


7月1日 楕円暗号の秘密鍵をリモートから盗める

産総研の人のツイッターを見ていると 「ハードウェアに入っている楕円暗号の秘密鍵をリモートからのアクセスで盗める」 という話が書かれたサイトのリツイートが、あったので、さっそく概要を読んでみました。

楕円暗号のハードウェアの実装によっては、リモートからアクセスで秘密鍵が盗める。 しかもタイミングだけで盗めるということのようです。
僕の考えは、組込みソフトウェアによってタイミングを調整し、例えばどんな値でも 同じ時間で計算するようにするなどの対策をすれば、いいのかもと。 サイトには、それが難しいと書いてありますが。

ちなみに産総研の人のツイッターをフォローしているだけで税金を使っているのと同じという人が 出てきそうなので説明すると、8bit CPU ICF3-Zは税金を使わないことを宣言していますが、 SnakeCubeでは、宣言していません。ただSnakeCubeも税金を使うことで評判が落ちるので、 税金を使いたいとは考えていませんが、SnakeCubeは次世代ICカードなど、 社会インフラでの活躍が期待されるため、必要なら、やむを得ないと考えています。


7月1日 2日前のことが思い出せない

クレジットカードで買い物をしたと思われる支払い(2000円弱)が、 思い出せなくて苦労しました。普通では数週間前に買った物とか、 日常の小さい出来事を、いちいち記憶しようとしなくても、覚えていることは多いでしょう。 たとえすぐに思い出せなくても、思い出そうとすれば、 思い出せることもあると思います。記憶は消され続けているような感じ。 このことは今に始まったことではありませんけど。


6月30日 Verilog版のSnakeCube開発(17)

作業報告です。それ以上ではありません。 Verilog版のSnakeCubeシミュレータに標準入力を使ってRSA暗号の演算データを入れて、 Verilogのシミュレータを実行、演算終了後、期待値と比較。 結果が違っていれば、シミュレータを異常終了させる。 これを適切な乱数データで大量シミュレーションできる仕組みでテストできるようになりました。 正しくは、動き始めた。
シミュレータを異常終了させる方法はicarusのvvpで-Nオプションを付けると $stopで異常終了するようです。


6月30日 TTLでICF3-Zを作るならという話(2)

TTLに実装するために機能を削減したICF3-Zを作り、 仮想マシンで互換性を維持するというアイディア。
ICF3-ZはTTLで実装することを考えて設計しているわけではないのですが、 トランジスタ数を減らすことに特化していたりSRAMチップが安価だったりするので TTLに実装するのにも向いていると思っています。 そしてTTLのCPUとしてはかなり高速になるかなと。 ただ、やっぱりTTLでは規模が大きいかなという気はしています。
少しでも作りやすくするには8bitの汎用レジスタ16本を無くして、 スクラッチパッド256バイトだけにするという方法もあるかなと。 安価な量産品のSRAMに効率的に実装できるようになります。
汎用レジスタを使ったプログラムは動かなくなりますが、ICF3-Zでは、 普通のCPUとは違った命令セットなので、スクラッチパッドだけでも、 問題がなく、多少、性能が落ちるくらいです。 また通常のICF3-Zと、TTL版ICF3-Zの仮想マシンを作れば、 その仮想マシンのコードの互換性は保つことができる。
つまり、スクリプト系の言語を仮想マシンで実装したものはTTL版ICF3-Zでも、 多少、性能が落ちる程度で動くかもしれないということです。
うまく仮想マシンを使った言語がICF3-Zに乗ってくれば、 TTL版のICF3-Zでも、動くアプリが多くなるみたいな。
あまり効果がないかもしれないですがAND演算とNOT演算があれば、 プログラムでOR演算やXOR演算が可能なので、仮想マシンにOR命令、XOR命令が作れたりします。


6月29日 TTLでICF3-Zを作るならという(1)

オープンソースのソフトウェアと同じでCPUもTTLで作りたいという人はあるかもしれない。 ICF3-Zは、プログラムメモリを多く消費するアーキテクチャで、 圧縮命令によってプログラムを圧縮しないと、メモリ効率の悪いアーキテクチャですが、 その分、CPUコアが小さくなっているのでTTLでも作れる規模かもしれない。 僕はTTLでCPUを作った経験がないので、適当なことを言って恐縮ですが。 ICF3-Zは8bitの演算レジスタA,B,C,Dを持っているので 8bitの汎用レジスタ16本は、リードもライトも転送だけで1サイクルのアーキテクチャなのです。 つまり汎用レジスタをSRAMに置けそう。ディユアルポートのSRAMもあるみたいですが高価なので、 1ポートのSRAMで、前半ライト、後半リードみたいに時分割すれば、なんとか、なる。多分。


6月29日 64バイトのメモリコピーの性能

言いたいことはICF3-Zは、既存の8bit CPUより優れている。
maxim integratedが自社のCPUと8bit CPUで有名なAVRとメモリコピーの性能を 比較している資料を見つけました。
MAXQ命令セットアーキテクチャとRISCのベンチマーク比較
maxim integratedは高性能の結果ですがパイプラインがないCPUなので、 あまり高周波数では動作しない予想なので、ベンチマークで示される 性能ほどではないのかも。
上記資料では64バイトのメモリコピーの性能ですがICF3-Zの都合で 16バイトのメモリコピーで比較します。

AVRは5命令、115サイクル。

ICF3-Zは10命令、133サイクル(8命令、85サイクル)
カッコ内の性能は16ビットポインタの上位8bitが16バイトの先頭と最後で同じ条件の場合

AVRのアーキテクチャとICF3-Zのアーキテクチャの違いから、 ICF3-Zが2倍の周波数になるという予想のもと補正をすると、 ICF3-Zが高性能かもしれない。
プログラムコードのメモリが多く必要になりますが、そこは圧縮命令で、 プログラムコードを小さくなるように、すればいいのかと。
ICF3-Zの説明書と少し命令数、サイクル数が違うように見えますが AVRと比較できるように補正しています。


6月29日 銀行向け署名端末を考えてみた(3)

カメラ端末に比べて署名端末はUSBケーブルを使うので、少し利便性が落ちる。 しかしカメラ端末は乾電池を使っているが、署名端末はUSBケーブルから電源を取れるので電池不要。 端末の製造原価や地球環境的にもUSBケーブルから電源を取れるほうがいいと思います。 乾電池ではなく充電式電池であっても、同じことが言えるでしょう。


6月29日 Verilog版のSnakeCube開発(16)

作業報告です。それ以上ではありません。 僕の稼働率を1日、2時間くらいまで抑えることを目標としているらしい。 おかげで寝ている時間が長くなっています。 verilogシミュレーションの入力データにファイルではなく、標準入力を使うように改造しています。 icarusでは動作するようになったのですがXilinxのxsimでは、まだうまくいっていなくて、 少し時間が、かかっています。標準入力をあきらめるか、どうするか。


6月28日 銀行向け署名端末を考えてみた(2)

考えてみた(2)の結論は署名端末、良さそうです。
カメラ付き端末ではブラウザでQRコードを受信、 端末が表示する数桁の数字をブラウザで送信する方法でした。 署名端末ではBASE64で送受信をすればいいと思います。 これには専用のBASE64アプリが必要になります。 銀行への送受信はブラウザでするため、このアプリはネットワークにアクセスすることもなく、 署名端末と送受信するだけです。ソースコードを公開しても問題がないものなので、 アプリのインストールが心配な顧客がいても対応できると思います。
BASE64のデータは、送受信データに署名を付けることで改ざんされることはありません。 そして読み取られても、それほど影響はないようには思いますが、共通鍵で 暗号化しておけば、安心です。
共通鍵暗号で最も利用されているのはAES暗号ですが、AES暗号は8bit CPUでも 高速に演算できます。


6月27日 銀行向け署名端末を考えてみた

無責任ながらパソコンで銀行振込をするための「署名端末」を考えてみた。 「署名端末」は、現実的なところにあるように思っています。
銀行によってはカメラ付きの端末でQRコードを読ませるタイプのものを導入しているみたいです。 この方式だと、恐らく、客と同じ鍵をサーバ上に持つ 必要があるので、サーバの管理は、かなり厳しいと思われます。 これまでの実績があるので、それほど問題を感じない人も多いかもしれないですが、 公開鍵暗号の署名を併用することで、サーバ側の管理コスト、経営リスクを軽減できるように思うのです。
個人で言うには大きなことを言っていますがOpenICF3や、 ICF3-Zの利権を持っているのは僕で、 その運用を僕が考えないといけないと思って「署名端末」なるものを言っているのです。
経営リスクについて、ピンとこない人は、あったかもしれません。 厳重に鍵を管理していると思われますが、なんらか鍵が漏れると大きな損害が出ます。 行員やシステムに詳しい内部の人間が離反すれば、その可能性も考えられるように思います。
公開鍵暗号を併用すれば、サーバ側に秘密鍵はないので漏れる心配がなく、 これまでの鍵が漏れても、公開鍵暗号側のチェックで、防げるというもの。
署名端末の原価が安ければ、署名併用をする署名端末を採用を考える銀行はあるように思います。 そしてOpenICF3とICF3-Zの2つを持つ、僕が、やれば、安価になるのではと考えているのです。
署名端末ではカメラが不要なので、その分のコストを下げることができます。 かわりにUSB接続が必要ですが、USB接続のチップは信用がなくてもいいので激安なものが使えます。
公開鍵暗号の鍵を長くする必要が出てくる場合も、僕がいれば SnakeCubeがあるので対応が容易です。 SnakeCubeの利権を持つ人は僕以外に無く、恐らくSnakeCubeより高性能高効率なものは、他にない。
ハッシュは32bit CPUでないと実装しにくいと思われるかもしれませんが、ICF3-Z上に32bitの 仮想マシンを実装することで、既存の32bitコードを、ICF3-Z上に比較的容易に移植できると 思われます。
署名端末の原価を安くするのに8bit CPU ICF3-Zは、役に立つかもしれません。 言えることはICF3-Zは流行ったほうがいいのかも。


6月27日 急に動画を1万円分買いました

急に動画(R18)を買いたくなったので1万円分買った。 うち6600円は12本のまとめ買い。
これは、まとめ買いではないけど→
自宅警備員 1stミッション イイナリ巨乳長女・さやか~編/PoROre


6月26日 家族の勧めで家電を買うことに

CPUの話をすると、良く家電が壊れたりするのだけど気のせいだろうか。 家族に家電(トースター)を買うように勧められた。既に価格は調査済みで予算は5000円ということだった。 amazonで買うのが楽なのだが、市民が気になり、わざわざ、近所の家電量販店(Joshin)に行った。 5000円弱のトースターを買いました。


6月25日 Verilog版のSnakeCube開発(15)

作業報告です。それ以上ではありません。 サイバー攻撃で身体に負荷がかかり1日に数時間以上、完全に 動けなくなることも多い状況です。以前として作業の進み方は遅い。 作業をしていても負荷が、かかっていることも多い。
Verilogのシミュレーションを乱数データで大量に流す仕組みを開発中。 C言語のシミュレーションで開発したものを流用するので、わずかな時間で開発ができるだろう。


6月24日 逆数演算の知財

知財に興味のある方のみ。 SnakeCubeのサイトで 「逆数演算の知財」のページを追加しました。


6月23日 Verilog版SnakeCubeでRSAできました!

無事、Verilog 48bit版SnakeCubeでRSAの署名演算が計算できました! まだ完全ではありませんが、暗号プロセッサとモンゴメリ乗算器の接続がうまくいったので、 完成に近いです。これから1032bit版に拡張していきますが拡張することを考慮して 開発環境を作ってきたので、それほど時間はかからない予定。 そこから、XilinxのFPGAへ貼り付ける作業をして、性能測定へ。


暗号プロセッサ OpenICF3