>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML
PHP

マッチ棒暗号: 安価なマイクロコントローラにECDSAを押し込む方法

1,419 スター

IoTや安価なハードウェアでデータを保護する場合、開発者は壁にぶつかりがちです。8ビットAVRや脆弱なARM Cortex-M0に完全なOpenSSLをデプロイしてみてください。ほとんどの場合、ファームウェアはメモリに収まらず、たとえ収まったとしても、メインのアプリケーションロジックにリソースが残らないでしょう。そんな時にmicro-eccプロジェクトが便利です—1つのことを非常にうまくやるツールです。

このプロジェクトのポイント

micro-eccはECDH(鍵交換)とECDSA(デジタル署名)アルゴリズムのコンパクトなC実装です。プロジェクトの著者であるKen MacKayは、プロセッサがあればどこでも動作するライブラリの作成を明確に目的としていました。

ここでの主要な手は動的メモリ割り当ての完全な放棄です。mallocとheapはなく、stackと静的ストレージだけです。組み込みシステムにとってこれは重要です:コンパイル時に暗号化がどれだけのメモリを消費するかを正確に把握でき、断片化や実行時のリークを恐れる必要がありません。

ライブラリでできること

ライブラリは5つの標準曲線をサポートしており、一般的なsecp256r1(P-256)と「Bitcoin」のsecp256k1を含みます。

主な機能は次のとおりです:

  • 8、32、64ビットアーキテクチャで動作します。
  • 既知のサイドチャネル攻撃から保護されています。
  • 純粋なCで書かれていますが、最大限の速度を引き出すためのAVRとARMのアセンブリスニペットがあります。
  • 寛容なBSD 2-Clauseライセンスの下で配布されています。

ところで、Arduinoで作業している場合、プロジェクトはLibrary Managerで直接利用可能です。手動で何かをダウンロードする必要はありません—just find micro-ecc and add it to your sketch.

小さなコード、大きなタスク

著者はコードがサイズに最適化されていると主張しています。マイクロコントローラの世界では、これはしばしば生の速度よりも重要です。月に1回しかファームウェア更新の署名を検証する必要がないなら、100msかかろうが500msかかろうがそれは重要ではありません。重要なのは、検証コードがフラッシュメモリの80%を消費しないことです。

それでも、コードにはオプションの最適化があります。例えば、ウィンドウ法を通じてパフォーマンスを調整できます。だが注意してください:高最適化レベルでARMプラットフォームを使用すると、GCCは特定のフラグ(-fno-tree-vrpなど)を必要とするかもしれません。さもないとすべてが壊れる可能性があります。

コードではどのように見えるか

ライブラリはミニマリストなインターフェースを持っています。始めるには、ファイルを数個プロジェクトにコピーしてヘッダファイルをインクルードするだけです。

曲線点はデフォルトでは0x04プレフィックスなしの非圧縮形式で表されます。ラジオで送信する際にすべてのバイトを節約する必要がある場合、ライブラリはecdsa_compute_vrsとecdsa_verify関数を提供します。

これは誰のためか

micro-eccが単に不可或しいシナリオがいくつかあります。まず、デバイスの認証です。例えば、センサーがサーバーに自分が本物であることを証明する必要がある場合、ECDSAはこのような署名を生成するのに最適です。

次に、Secure Bootです。STM32やAVR用のカスタムブートローダーを書いている場合、micro-eccは新しいファームウェアイメージをフラッシュに書き込む前に署名を検証するのに役立ちます。

3番目に、ウェアラブル電子機器やバッテリー駆動のセンサーを作成している場合、CPUサイクルが少なくなればなるほどデバイスの寿命が延びます。ARMとAVR用のアセンブリスニペットが非常に役立ちます。

最後にいくつかのメモ

micro-eccの素晴らしい点にもかかわらず、プロジェクトには癖があります。READMEは非常に簡潔なので、各関数の詳細についてはソースコードのコメントを調べる必要があります。

Windowsでプロジェクトをビルドする場合は、システムのライブラリ(-lmなど)をリンクすることを忘れないでください—エントロピーの処理に必要なのです。AVRの場合、コンパイラの最適化(-O2以上)を有効にする必要があります。さもないと、スタック処理の特性によりライブラリが正しく動作しない可能性があります。

全体として、これは専門ライブラリがどのように見えるべきかの良い例です:狭い焦点、最小限の依存関係、予測可能な動作。ハードウェアがTLSには弱すぎるがセキュリティが必要な場合、micro-eccは確かにあなたのプロジェクトに最適かもしれません。