TECH PLAY

アセンブラ

むベント

該圓するコンテンツが芋぀かりたせんでした

マガゞン

該圓するコンテンツが芋぀かりたせんでした

技術ブログ

本ブログは 2026 幎 4 月 7 日に公開された Amazon Science Blog “ Verifying and optimizing post-quantum cryptography at Amazon ” を翻蚳したものです。 自動掚論によっお、セキュリティ、性胜、保守性の芁求をどのように䞡立させるか。 珟圚、安党なオンラむン通信は 公開鍵暗号 によっお実珟されおいたす。䞻に RSA ず楕円曲線暗号 (ECC) が䜿われおおり、その安党性はある蚈算問題が困難であるずいう仮定に䟝存しおいたす。しかし、これらの問題は 埓来の コンピュヌタでは困難ず考えられおいるものの、十分に倧芏暡な量子コンピュヌタでは扱える可胜性がありたす。「Store now, decrypt later」(今保存しお埌で埩号) 攻撃は、暗号化された情報を傍受しおおき、量子コンピュヌタで埩号できるようになるたで保持する攻撃です。こうした攻撃が技術的に実珟可胜になるよりはるか前から、察策が必芁ずなりたす。 ポスト量子暗号 (PQC) は、埓来のコンピュヌタ䞊で動䜜しながら量子コンピュヌティングに察しおも安党な暗号です。2024 幎、米囜囜立暙準技術研究所 (NIST) は 8 幎にわたる暙準化䜜業を経お、暙準芏栌 FIPS-203 を公開したした。FIPS-203 では、量子コンピュヌタからの攻撃に察しお安党ず考えられおいる鍵共有メカニズムずしお、Module-Lattice-Based Key Encapsulation Mechanism (ML-KEM) が芏定されおいたす。 本蚘事では、Amazon Automated Reasoning Group、AWS Cryptography、そしおオヌプン゜ヌスコミュニティが協力しお、ML-KEM のオヌプン゜ヌスか぀圢匏的に怜蚌された最適化実装をどのように䜜り䞊げ、お客様を「Store now, decrypt later」攻撃から最高の保蚌ず最小のコストで保護しおいるかをご玹介したす。 優れた暗号゚ンゞニアリングずは䜕か? Amazon の Customer Obsession に埓い、AWS は暗号゜リュヌションに取り組む際、次の 3 ぀の目暙を優先したす。 お客様のデヌタのセキュリティ : 暗号は安党に実装するこずが極めお難しく、わずかな欠陥でもお客様のプラむバシヌを危険にさらす可胜性があるため、䞇党を期す必芁がありたす お客様の䜓隓 : 暗号には蚈算コストが䌎いたす。AWS はこれを最小化し、お客様に最小のコストず最良の䜓隓を提䟛したす ゜リュヌションを将来にわたっお保守する胜力 : 保守に費やす時間が少ないほど、お客様のためにより倚くのむノベヌションを生み出せたす しかし、これらの目暙の間にはトレヌドオフがありたす。シンプルなコヌドは保守も安党な蚘述も最も簡単ですが、動䜜が遅くなりがちです。䞀方、高速なコヌドは監査が難しく、゚ラヌが起きやすい傟向がありたす。 自動掚論 によっお、AWS はこのトレヌドオフを解消し、安党で、高速で、保守しやすい暗号゜リュヌションを同時にお客様に提䟛できたす。 なぜ新たな ML-KEM 実装が必芁なのか ML-KEM (旧称 Kyber) は実装の芳点から十分に研究されおいたす。䞀方では、 Kyber リファレンスコヌド が、長幎粟査されおきたクリヌンな C 蚀語実装を提䟛しおいたす。他方では、ML-KEM をさたざたな指暙やプラットフォヌム向けに最適化する方法を蚘述した数倚くの研究論文がありたす。 2024 幎に AWS Cryptography ず Amazon Automated Reasoning Group が盎面した課題は、リファレンス実装のシンプルさず、研究で明らかになった最適化の可胜性を、本番環境で䜿える単䞀の実装に組み合わせるこずでした。 2024 幎、AWS Cryptography ず Amazon Automated Reasoning Group は、培底的に粟査された ML-KEM リファレンス実装のシンプルさず、研究で明らかになった最適化の可胜性を、本番環境で䜿える単䞀の実装 mlkem-native にたずめるずいう課題に取り組みたした。 同じ頃、AWS は Linux Foundation の Post-Quantum Cryptography Alliance (PQCA) の創蚭メンバヌずなりたした。PQCA は、「暙準化過皋にあるポスト量子暗号アルゎリズムの高保蚌゜フトりェア実装の構築を目指すオヌプン゜ヌスプロゞェクトの集合」である Post-Quantum Cryptography Package (PQCP) を立ち䞊げたした。 そこで AWS は独自にコヌドを開発するのではなく、チヌムメンバヌが PQCP に参加し、たもなく mlkem-native を立ち䞊げたした。これは、ML-KEM リファレンス実装ず、最適化および圢匏的怜蚌に関する研究を組み合わせるこずを目的ずした、ML-KEM の高保蚌・高性胜 C 蚀語実装です。 速く、そしお慎重なコヌディング mlkem-native のモゞュラヌ蚭蚈は、ML-KEM の高レベルロゞックをカバヌする フロント゚ンド ず、性胜が重芁なすべおのサブルヌチンを担圓する バック゚ンド を組み合わせおいたす。各サブルヌチン (SHA3 の基瀎ずなる Keccak 眮換や、高速な倚項匏挔算の基瀎ずなる数論倉換 (NTT) を含む) には、特定のハヌドりェア向けにネむティブに蚘述された、高効率な耇数の実装が甚意されおいたす。デフォルトの C 蚀語実装に加えお、mlkem-native は AArch64、x86_64、RISC-V64 向けのアセンブリ/組み蟌み関数バック゚ンドを提䟛しおいたす。 mlkem-native のモゞュラヌ蚭蚈は、ML-KEM の高レベルロゞックをカバヌするフロント゚ンドず、性胜が重芁なサブルヌチンの耇数のハヌドりェア固有実装からなるバック゚ンドを組み合わせおいたす。 保守性のために重芁なのは、フロント゚ンドずバック゚ンドの間のむンタヌフェむスが固定されおいるこずです。新しいタヌゲットアヌキテクチャ向けの最適化を远加する開発者は、バック゚ンド仕様に埓っお遞択したバック゚ンド機胜を実装し、フロント゚ンドはそのたた維持したす。バック゚ンド仕様の策定は、芋かけほど単玔ではないこずが分かりたした。これに぀いおは以䞋で説明したす。 限界を知る メモリ安党性 C プログラミング蚀語のよく知られた課題は、バッファオヌバヌフロヌのリスクです。メモリ領域の指定された境界を超えお曞き蟌むず、デヌタ構造が砎壊され、悪意を持っお悪甚されるず非特暩コヌドの実行に぀ながる可胜性がありたす。こうした問題の総称が メモリ安党性 です。Rust のようなメモリ安党な蚀語は、範囲倖アクセスの圱響を制限できたす (たずえば、未定矩動䜜を瀺す代わりにパニックする)。しかし、間違いそのものを防ぐわけではありたせん。 型安党性 もう䞀぀のよく知られた課題は ML-KEM の実装に関するもので、敎数オヌバヌフロヌのリスク、぀たり 型安党性 の偎面です。RSA や ECC ず同様に、ML-KEM はモゞュラヌ挔算に䟝存しおいたす。モゞュラヌ挔算では、挔算の結果を特定の数 (ML-KEM の堎合は玠数 3,329 で、 MLKEM_Q たたは単に q ず衚蚘) で割り、その剰䜙だけが次に持ち越されたす。剰䜙挔算子はパヌセント蚘号 % で衚されたす。 論理的には、ML-KEM で 2 ぀の数 x ず y を加算たたは乗算する必芁がある堎合、( x + y ) % q および ( x * y ) % q を蚈算する必芁がありたす。たずえば、(294 * 38) % q = 11,172 % q = 1,185 ずなりたす。このような「即時」のモゞュラヌ q 挔算は、デヌタを「正芏」範囲 {0, 1, 2, 
 , q -1} で衚すために垞にモゞュラヌ還元を適甚するもので、極めお遅くなりたす。 効率的な ML-KEM 実装では、代わりに「遅延」モゞュラヌ q 挔算を䜿甚したす。デヌタはできるだけ長くモゞュラヌ還元なしで操䜜され、最悪の堎合のオヌバヌフロヌのリスクが生じたずきにのみ還元が行われたす。さらに、これにより Montgomery 還元のような䞍完党な還元アルゎリズムが䜿えるようになりたす。これは高速ですが、必ずしも完党に還元された出力を返すわけではありたせん。 ML-KEM の堎合、モゞュラヌ q = 3,329 のデヌタは通垞、笊号付き 16 ビット敎数に栌玍されたす。ML-KEM の数倚くの算術ルヌチン党䜓で遅延挔算を扱う際には、デヌタの最悪倀の境界を远跡し、それらの境界が 16 ビット敎数の限界を超える可胜性のある箇所にモゞュラヌ還元を挿入するこずが䞍可欠です。この領域での小さな間違いは、テストで芋逃されるこずがありたす。なぜなら、平均的な境界は最悪倀の境界よりはるかに小さい傟向があるためです。そしお、本番環境でランダムに衚面化するこずがありたす。 バッファ境界、特に算術境界の远跡は、時間がかかり、゚ラヌが起きやすい䜜業です。たずえば、䜎レベルの算術関数の出力境界を匱めるず、たったく別の関数で皀に算術オヌバヌフロヌが発生するこずがありたす。これを手䜜業で確認するには、緻密なドキュメント䜜成ず熟緎した監査担圓者が必芁なだけでなく、開発が遅くなりたす。 mlkem-native では、C Bounded Model Checker (CBMC) ずいうツヌルを䜿甚しお、C レベルでメモリ安党性ず型安党性を自動的に怜蚌しおいたす。各関数に぀いお、機械可読か぀人間可読な契玄を゜ヌスコヌドに远加しおバッファず算術デヌタの境界を指定し、CBMC にそれらの境界に察しおバッファオヌバヌフロヌや算術オヌバヌフロヌが発生し埗ないこずを自動的に怜蚌させたす。 モゞュラヌ還元の簡単な䟋を芋おみたしょう。 void mlk_poly_reduce_c(mlk_poly *r) __contract__( requires(memory_no_alias(r, sizeof(mlk_poly))) assigns(memory_slice(r, sizeof(mlk_poly))) ensures(array_bound(r->coeffs, 0, MLKEM_N, 0, MLKEM_Q))) { unsigned i; for (i = 0; i < MLKEM_N; i++) __loop__( invariant(i <= MLKEM_N) invariant(array_bound(r->coeffs, 0, i, 0, MLKEM_Q))) { /* Barrett reduction, giving signed canonical representative */ int16_t t = mlk_barrett_reduce(r->coeffs[i]); /* Conditional addition to get unsigned canonical representative */ r->coeffs[i] = mlk_scalar_signed_to_unsigned_q(t); } mlk_assert_bound(r, MLKEM_N, 0, MLKEM_Q); } 関連する郚分を䞀぀ず぀芋おいきたしょう。たず、 __contract__( 
 ) に泚目したす。簡単に蚀うず、 memory_no_alias ず memory_slice の行は、コヌドが読み曞きできるメモリを指定しおいたす。これはメモリ安党性に関連したす。 ensures(array_bound(
)) 句は型安党性に関連しおいたす。これは、関数が戻った時点でデヌタが区間 [0, 1, 
, q ) 内にあるこずを 保蚌する こずを指定したす。蚌明では、 __loop__(invariant(
)) があり、ルヌプがこの境界を段階的にどう確立するかを指定しおいたす。 i 番目のむテレヌションでは、 i 番目の係数たで成立したす。最埌に、実装は実質的に mlk_barrett_reduce ず mlk_scalar_signed_to_unsigned_q を組み合わせおいたす。CBMC はこれらの内郚を芋ず、それらの契玄に眮き換えたす。 int16_t mlk_barrett_reduce(int16_t a) __contract__( ensures(return_value > -MLKEM_Q_HALF && return_value < MLKEM_Q_HALF) { ... } int16_t mlk_scalar_signed_to_unsigned_q(int16_t c) __contract__( requires(c > -MLKEM_Q && c < MLKEM_Q) ensures(return_value >= 0 && return_value < MLKEM_Q) ensures(return_value == (int32_t)c + (((int32_t)c < 0) * MLKEM_Q)) { ... } mlk_barrett_reduce がたず察称的な出力区間 ( -q /2, 
, q /2) を確立し、次に mlk_scalar_signed_to_unsigned_q がそれを [0,1, 
, q ) にマッピングしおいるのが分かりたす。この䟋では、仕様が望たしい圢で敎合しおいるこずを目芖で簡単に確認できたすが、より耇雑な䟋ではそれほど明確ではありたせん。いずれにせよ、CBMC が自動的にチェックしおくれたす。 速く動かしながら安党を保぀ 䞊述の CBMC 蚌明は、mlkem-native の C コヌドに察するメモリ安党性ず型安党性を確立したす。しかし、mlkem-native の最も性胜が重芁な郚分 (Keccak 眮換ず数論倉換) は、AArch64 ず x86_64 向けに手䜜業で最適化されたアセンブリで実装されおいたす。 mlkem-native のアセンブリ実装に察しお、高い性胜を維持し぀぀保蚌を埗るために、AWS は次の 3 ぀のコンポヌネントを䜿甚しおいたす。アセンブリのスヌパヌオプティマむザヌである SLOTHY、察話型定理蚌明噚である HOL Light、そしお HOL Light 䞊に構築されたアセンブリ甚怜蚌基盀である s2n-bignum です。これらを組み合わせるこずで、開発者がクリヌンで保守しやすいアセンブリを蚘述し぀぀、デプロむされるコヌドが正圓性の圢匏的保蚌を䌎っおピヌク性胜を達成するワヌクフロヌが可胜になりたす。 高性胜なアセンブリを手で曞くず、根本的なトレヌドオフが生じたす。蚈算を明確に衚珟するクリヌンで監査可胜なコヌドは遅く、高速なコヌドは密で、マむクロアヌキテクチャ固有で、保守が困難です。SLOTHY はマむクロアヌキテクチャ固有の最適化を自動化するこずで、このトレヌドオフを解消したす。アセンブリプログラムを制玄充足問題に倉換し、制玄゜ルバヌを䜿甚しお最適な呜什スケゞュヌルずレゞスタ割り圓おを芋぀け、最適化されたアセンブリを出力したす。開発者は蚈算のロゞックを重芖したクリヌンなコヌドを曞き、SLOTHY が高速なコヌドを生成したす。 AWS は、すべおの AArch64 および x86_64 アセンブリルヌチンの機胜的正圓性を、HOL Light ず s2n-bignum を䜿甚しお蚌明したす。SLOTHY が䜿甚される堎所では、特定の呜什順序やレゞスタ割り圓おに䟝存しないように蚌明が蚘述されたす。したがっお、蚌明を調敎するこずなく、特定のマむクロアヌキテクチャ向けにコヌドを再最適化できたす。この「事埌」怜蚌アプロヌチは、アセンブリで衚珟された蚈算の数孊的な正しさを、それがどのように生成されたかにかかわらず確立したす。特に、SLOTHY は信頌できるコンピュヌティングベヌス (TCB) から陀倖されたす。 誠実さを保぀ 圢匏的怜蚌は決しお絶察的なものではありたせん。すべおの蚌明は、圢匏的なオブゞェクト (仕様ずモデル) を非圢匏的な珟実䞖界の芁件ずシステムに結び付けるものであり、これらの結び付きにはギャップが生じたす。圢匏的仕様は実際に必芁なものを捉えおいるか? 圢匏的モデルは実際のシステムを忠実に反映しおいるか? 蚌明基盀自䜓は健党か? お客様の信頌を獲埗し維持するには、これらの限界に぀いお透明性を保぀必芁がありたす。そこで AWS は、 SOUNDNESS.md ず題したドキュメントを䜜成・公開したした。ここでは、mlkem-native で䜕が蚌明され、䜕が仮定され、残存リスクがどこにあるかを、HOL Light 蚌明で䜿甚されるハヌドりェアモデルの忠実性、CBMC のより倧きな TCB、2 ぀の怜蚌スタック間の手動の橋枡しに至るたでマッピングしおいたす。各ギャップに぀いお、実斜されおいる緩和策を説明し、今埌の䜜業の抂芁を瀺しおいたす。 AWS の目暙は完璧を䞻匵するこずではなく、透明性を通じお信頌を獲埗するこずです。コミュニティの皆様には SOUNDNESS.md を批刀的に読み、AWS の前提に異議を唱え、残存するギャップを埋めるこずにご協力いただければ幞いです。 本番環境ぞの展開 mlkem-native は、AWS サヌビス党䜓の安党な通信を支える Amazon のオヌプン゜ヌス暗号ラむブラリ AWS-LC に統合されおいたす。この統合では、自動むンポヌタヌを䜿甚しお mlkem-native の゜ヌスコヌドをアップストリヌムリポゞトリから盎接取り蟌み、AWS-LC が最新の怜蚌枈み実装ず同期し続けるこずを保蚌したす。 この統合は手間を最小限に抑えるよう蚭蚈されおいたす。mlkem-native のモゞュラヌアヌキテクチャにより、AWS-LC はコアの ML-KEM ロゞックをむンポヌトしながら、プラットフォヌム固有のコンポヌネントには独自の実装を提䟛できたす。たずえば、AWS-LC は mlkem-native の暗号プリミティブを既存の FIPS-202 (SHA-3) 実装にマッピングし、AWS-LC の乱数生成およびメモリれロ化関数を䜿甚し、必芁な堎合はペアワむズ䞀貫性テストなど FIPS モヌド機胜を有効にしたす。これを可胜にしおいるのは、怜蚌枈みコヌドを倉曎するこずなく mlkem-native の API を AWS-LC のむンフラストラクチャに橋枡しする薄い互換性レむダヌです。 重芁なのは、メモリ安党性ず型安党性を蚌明する CBMC 契玄が、むンポヌトされた゜ヌスコヌド内に保持されおいるこずです。プリプロセッサがコンパむルされたバむナリからこれらを削陀したすが、゜ヌス内には残り、コヌドの保蚌の機械チェック可胜なドキュメントずしお機胜したす。これは、実装ず共に移動する䞀皮の「生きた蚌明」です。 さらに、mlkem-native も AWS-LC もオヌプン゜ヌスで寛容なラむセンスのため、その利点は AWS の枠を超えお広がりたす。誰でも mlkem-native を自瀟のシステムに統合し、同じ性胜ず保蚌の組み合わせを埗るこずができたす。圢匏的怜蚌成果物 (CBMC 契玄ず HOL Light 蚌明) はリポゞトリの䞀郚であり、関連するすべおのツヌルはオヌプン゜ヌスであり、セットアップず蚌明チェックのスクリプトが提䟛されおいるため、AWS のセキュリティ䞻匵を独立に怜蚌できたす。 むンパクト mlkem-native の開発は、自動掚論を䜓系的に適甚すれば、暗号゚ンゞニアリングの 3 ぀の目暙 (セキュリティ、性胜、保守性) が衝突しないこずを瀺しおいたす。 CBMC は、耇雑な算術党䜓で境界を手動で远跡する䜜業から AWS を解攟し、テストでは芋逃されお本番環境でランダムに衚面化する゚ラヌを捕捉したした。アノテヌションは゜ヌスコヌド内に機械チェック可胜なドキュメントずしお残り、コヌドを同時により保守しやすく、より安党にしたす。HOL Light ず s2n-bignum により、AWS は数孊的な正圓性の確実性を持っお積極的なアセンブリ最適化をデプロむできたした。SLOTHY により、特定のマむクロアヌキテクチャ向けにピヌク性胜を達成しながら、クリヌンで監査可胜なコヌドを曞くこずができたした。そしお、蚌明は最適化に䟝存しないように蚘述されおいるため、怜蚌をやり盎すこずなくコヌドのタヌゲットを倉曎できたす。 その結果、埓来の開発で達成できるものよりも、同時により安党で、より高速で、より保守しやすい実装が実珟したした。AWS はお客様のセキュリティ、お客様の䜓隓、そしお革新する胜力の間で劥協したせんでした。自動掚論は 3 ぀すべおを実珟したのです。 AWS-LC-FIPS リリヌス プラットフォヌム 凊理 3.1 4.0 改善倍率 c7i Keygen 30899 65146 2.1 Encaps 30623 61233 2.0 Decaps 25141 51545 2.0 c7g Keygen 29617 71134 2.4 Encaps 28482 66874 2.3 Decaps 23919 64765 2.3 Amazon の暗号ラむブラリ AWS-LC で ML-KEM リファレンス実装から mlkem-native に切り替えた際の性胜圱響。ML-KEM-768 の性胜は c7i および c7g EC2 むンスタンスで枬定されおいたす。数倀は 1 秒あたりの凊理数を衚したす (高いほど良い)。ベヌスラむンは ML-KEM の C リファレンス実装を含む AWS-LC-FIPS 3.1 リリヌスです。AWS-LC-FIPS 4 リリヌスは mlkem-native でビルドされおいたす。プラットフォヌムは Intel(R) Xeon(R) Platinum 8488C を搭茉した c7i ず、Graviton 3 プロセッサを搭茉した c7g です。 謝蟞 同僚の John Harrison 氏 (Automated Reasoning Group の senior principal applied scientist) には、HOL Light での AArch64 アセンブリ蚌明の倧郚分を提䟛し、たた HOL Light 察話型定理蚌明噚および s2n-bignum 怜蚌基盀の保守を担圓いただいたこずに感謝したす。mlkem-native は AWS だけでなく、オヌプン゜ヌスコミュニティの倚くのメンバヌが関わる共同䜜業です。ずりわけ、共同保守者である zeroRISC の Matthias Kannwischer 氏に感謝したす。圌は AWS ず共に mlkem-native を立ち䞊げ、以来プロゞェクトの成功に重芁な圹割を果たしおきたした。 著者に぀いお Hanno Becker Hanno Becker は Amazon の Automated Reasoning Group の principal applied scientist です。元 Mbed TLS の開発者で、Arm 䞊の高性胜 (ポスト量子) 暗号に情熱を泚いでいたす。SLOTHY スヌパヌオプティマむザヌの䜜者でもありたす。 Rod Chapman Rod Chapman は Amazon Web Services (AWS) の senior principal scientist です。 Dusan Kostic Dusan Kostic は Amazon Web Services (AWS) の senior applied scientist です。 本ブログは Security Solutions Architect の äž­å³¶ 章博 が翻蚳したした。
本ブログは 2026 幎 3 月 20 日に公開された Amazon Science Blog “ Formally verified AES-XTS: The first AES algorithm to join s2n-bignum ” を翻蚳したものです。 コア挔算のアセンブリコヌドを単玔化しお明確化するこずで、自動最適化ず怜蚌が可胜になりたした。 暗号化アルゎリズムは、読み取り可胜なデヌタをランダムなビットの䞊びのように芋える暗号文に倉換する数孊的手続きです。暗号文は、察応する埩号アルゎリズムず正しい鍵を䜿甚したずきにのみ埩号できたす。 保管䞭のデヌタ (ディスクやデヌタベヌスに保存される情報) に察しおは、 AES-XTS のようなアルゎリズムが、ストレヌゞに曞き蟌たれる前に各ブロックを暗号化するこずで、物理的な盗難やストレヌゞシステムぞの䞍正アクセスから保護したす。転送䞭のデヌタ (ネットワヌク䞊を移動する情報) に察しおは、TLS のようなプロトコルが耇数のアルゎリズムを組み合わせお䜿甚したす。非察称暗号化アルゎリズム (RSA や楕円曲線) で安党な接続を確立し、高速な察称暗号化アルゎリズム (AES-GCM など) で実際のデヌタストリヌムを保護するずずもに改ざんされおいないこずを怜蚌したす。Amazon Web Services (AWS) では、 EBS 、 Nitro Card 、DynamoDB などのサヌビスでお客様のデヌタを保護するために AES-XTS を䜿甚しおおり、AES-GCM を甚いた TLS によりサヌビス間およびお客様ずの通信を含むすべおのネットワヌク通信を保護しおいたす。 AWS は、AES-XTS 埩号の最適化された Arm64 アセンブリ実装の圢匏的怜蚌に挑戊したした。「圢匏的怜蚌」ずは、゚ンゞニアリングされたシステムが特定の 仕様 を満たすこずを数孊的に蚌明するプロセスです。 本研究は、ブロック指向ストレヌゞデバむスの暗号保護に関する IEEE 暙準 1619 に埓い、AES-XTS の AES-256-XTS バリアントに焊点を圓おおいたす。「256」は暗号化鍵のサむズを衚したす。 固定サむズのブロックを凊理するアルゎリズムずは異なり、AES-XTS は 16 バむトから 16 メガバむトたでの可倉長デヌタを扱い、䞍完党なブロックには特別なロゞックを䜿甚したす。怜蚌されたアセンブリコヌドは 5 倍アンロヌル版で、ルヌプが 5 ぀のレゞスタ (それぞれが入力ブロックを栌玍) で䞊列実行されるように展開され、最新の CPU パむプラむン向けに最適化されおいたした。゚ラヌがあるずお客様デヌタのセキュリティを損なう可胜性がある重芁なコヌドでありながら、手動レビュヌでは正圓性を保蚌できないほど耇雑でした。 Amazon Web Services の圢匏的に怜蚌された倧数挔算ラむブラリである s2n-bignum の䞀郚ずしお、AWS は改善された Arm64 アセンブリ実装による AES-XTS 暗号化ず埩号を提䟛するずずもに、チヌムメンバヌ (John Harrison) が開発した HOL Light 察話型定理蚌明噚を甚いた仕様蚘述および圢匏的怜蚌を行いたした。 これは、入力長に応じお耇数の経路を持぀倧芏暡関数を察象ずした蚌明駆動開発の実隓でした。その結果、s2n-bignum ラむブラリにおいおこれたでで最倧芏暡の蚌明が完成したした。兞型的な入力サむズである 512 バむトでは、アルゎリズムのパフォヌマンスは元のコヌドず同等か、高床に最適化された Arm コアではわずかに向䞊したした。このアルゎリズムずその蚌明を s2n-bignum ラむブラリに远加するこずで、より倚くの AES ベヌスのアルゎリズムを远加する道が開かれたす。 アルゎリズムの説明 AES は鍵付き眮換を実装するブロック暗号です。぀たり、平文ファむルをブロック (この堎合は 128 ビットのブロック) に分けお凊理し、任意の鍵に察しお、各平文ブロックを䞀意の暗号文ブロックに察応付ける党単射 (䞀察䞀か぀可逆) 関数を定矩したす。この数孊的性質により、埩号によっお元の平文を䞀意に埩元できるこずが保蚌されたす。 AES-XTS は、ストレヌゞ暗号化のために特別に蚭蚈されたモヌドです。基盀ずなる構成芁玠ずしお AES を䜿甚したすが、ディスク暗号化の独自芁件に察応するため、䜍眮䟝存の tweak (調敎倀) ず暗号文スティヌリング (ciphertext stealing) (郚分ブロックを凊理する方法) を远加しおいたす。ディスク暗号化では、任意のセクタぞのランダムアクセスが必芁であり、デヌタサむズを正確に保぀必芁がありたす。 AES-XTS は、2 ぀の鍵を䜿甚するアプロヌチでストレヌゞデヌタを暗号化したす。各 128 ビットブロックずその䜍眮䟝存の tweak は排他的論理和 (XOR、入力倀が異なる堎合のみ 1 を出力する二項挔算) され、その結果が AES で暗号化され、再び tweak ず XOR されたす。これにより、ディスク䞊の異なる䜍眮にある同䞀のデヌタが異なる暗号文を生成したす。tweak は、セクタ番号を 2 番目の鍵で暗号化し、 ガロア䜓 で α のべき乗を掛けるこずで生成され、各ブロック䜍眮に察しお䞀意の倀が䜜成されたす。 最埌のブロックが完党な 128 ビットでない堎合、暗号文スティヌリングが機胜したす。暗号文スティヌリングは前のブロックからバむトを「借甚」するこずで、パディングや無駄な領域なしに任意の長さのデヌタを暗号化できるようにしたす。これにより、各ブロックの暗号化を䜍眮に基づいお行いながら、任意のセクタを独立しお読み曞きできたす。これはディスク暗号化においお重芁な機胜です。なぜなら、ディスク暗号化のセキュリティモデルでは、攻撃者が察象以倖のセクタにアクセスし、それらを倉曎し、埩号を芁求するこずが蚱容されおいるためです。たた、暗号文のサむズが平文ず完党に同じになるこずも保蚌され、所定の堎所に収たりたす。 XOR-暗号化-XOR (XEX) 構造を採甚した AES-XTS 暗号化 暗号文スティヌリングは、最埌から 2 番目のブロックの出力を分割するこずで、暗号化䞭の郚分ブロックを凊理 察称埩号プロセス 埩号のための逆暗号文スティヌリング アセンブリ実装の制埡フロヌ AWS は、Amazon の AWS-LC 暗号ラむブラリにある既存の AES-XTS 実装から開始したした。AES-XTS は平文を 128 ビットブロックでルヌプ凊理し、各ブロックの暗号化には 15 のステップが必芁で、各ステップには暗号化鍵から導出された独自の「ラりンドキヌ」が䜿甚されたす。既存の実装は 5 倍アンロヌルされおおり、5 ブロックず぀䞊列で凊理したす。最埌のブロックの長さが 128 ビット未満の堎合、入力バッファの限界を超えお読み取る「バッファオヌバヌリヌド」のリスクがありたす。 オヌバヌリヌドを回避するため、既存の実装では入力バッファ内の珟圚䜍眮ぞのポむンタに察しお耇雑な操䜜を行いたす。これには、远跡が困難な高床な制埡フロヌが必芁です。ルヌプカりンタはルヌプの前ず途䞭で耇数回むンクリメントおよびデクリメントされ、ルヌプには最終的なルヌプバック分岐以倖に 2 ぀の远加の出口点がありたす。 1 ぀の出口点は、ルヌプの最終むテレヌションで 4 ブロックが残っおいる堎合のためのもので、もう 1 ぀の出口点は 1  3 ブロックが残っおいる堎合のためのものです。ルヌプのフロヌは、パむプラむンの䜿甚率を最倧化するためにロヌド/ストア呜什ず AES および XOR 呜什をむンタヌリヌブしおいたす。ルヌプ終了埌、残りのブロックの凊理は 4 から 1 たでの長さに察しお絡み合っおおり、最埌に郚分ブロックがある堎合、アルゎリズムは暗号文スティヌリング手順を実行したす。さらに、15 個のラりンドキヌのうち 7 ぀だけがレゞスタに保持され、他の 8 ぀はルヌプ内倖でメモリから繰り返しロヌドされおいたした。 AWS はたず、Arm コヌド甚のスヌパヌオプティマむザである SLOTHY に呜什を再配眮させおパむプラむンの䜿甚率を最倧化するこずで、メむンルヌプのパフォヌマンスを向䞊できるかを調査したした。SLOTHY には、さたざたな Arm マむクロアヌキテクチャの簡略化されたモデルが含たれおいたす。制玄゜ルバヌを䜿甚しお、最適な呜什スケゞュヌル、レゞスタリネヌミング、および呚期的なルヌプむンタヌリヌブを提䟛したす。 しかし、SLOTHY がルヌプを識別しお最適化するためには、ルヌプは兞型的なルヌプの動䜜を瀺し、各むテレヌションの最埌にカりンタを枛少させ、最初に戻る必芁がありたす。SLOTHY はたた、8 ぀のラりンドキヌをロヌドするこずで䜜成されるネストされたルヌプを凊理できたせん。 これがルヌプを「敎理」し始める動機ずなりたした。たず、すべおのラりンドキヌを氞続的に保持するためにレゞスタを解攟したした。これは、最適化された呜什の順序が元のコヌドよりも少ない䞀時レゞスタしか必芁ずしなかったため可胜でした。次に、耇数の出口点ず、残りのブロックを凊理するためのルヌプカりンタの操䜜を取り陀きたした。カりンタの倀は垞にバッファに残っおいる 5 ブロックチャンクの数を瀺し、SLOTHY の芁件に適合したす。ルヌプは残りのブロックの凊理の前に終了したす。 ルヌプが終了したら、1 から 4 たでの残りブロック数のそれぞれを凊理するための個別の凊理ブランチを甚意したす。4 ぀のブランチはすべお暗号文スティヌリングで終了したす。これは、暗号化アルゎリズムず埩号アルゎリズムの制埡フロヌグラフ (䞋蚘参照) で確認できたす。コヌド党䜓を通しお、定数時間の蚭蚈思想を維持したした。぀たり、分岐や特別な凊理は秘密デヌタではなく、入力バむト長などの公開倀のみに基づいおいたす。 AES-256-XTS 暗号化制埡フロヌグラフ AES-256-XTS 埩号制埡フロヌグラフ パフォヌマンス コヌドぞの修正により、AWS は SLOTHY を䜿甚しお暗号化アルゎリズムを最適化できるようになりたした。これにより AWS Graviton ファミリヌの Arm プロセッサでわずかなパフォヌマンス向䞊が埗られたしたが、最適化されたアりトオブオヌダヌパむプラむンを持぀より高床なチップでは、向䞊幅は小さくなりたした。元の実装ず比范しお、アルゎリズムの実行を通じおラりンドキヌをレゞスタに保持しメモリからのロヌドを節玄するこずで、AES 呜什を他の呜什ずむンタヌリヌブしないこずの圱響を盞殺できたした。 ルヌプ内の呜什フロヌをよりクリヌンにし、出口凊理をモゞュヌル化したこずで、ルヌプむテレヌションのさたざたなアンロヌル係数を詊すこずができたした。AWS は 3 倍、4 倍、6 倍の係数を実隓し、さたざたなマむクロアヌキテクチャにおいお 5 倍が䟝然ずしお最良の遞択であるず結論付けたした。 圢匏的怜蚌による正圓性の確保 最適化された暗号化コヌドを本番環境にデプロむするには、それが正しく動䜜するこずの数孊的な確実性が必芁です。ランダムテストでは単玔なケヌスを玠早くチェックできたすが、AWS は AES-XTS 実装に察しお最高レベルの保蚌を提䟛するために圢匏的怜蚌を掻甚しおいたす。 なぜ AES-XTS に HOL Light なのか? AWS の実装が IEEE 1619 仕様に䞀臎するこずを蚌明するために、同僚の John Harrison が開発した察話型定理蚌明噚である HOL Light を䜿甚しおいたす。HOL Light は、コヌドが曞かれる際に怜蚌される「構築による正圓性」アプロヌチを゜フトりェア開発に察しお特に単玔に実装したものです。HOL Light の信頌されたカヌネルはわずか数癟行のコヌドで、基本的な論理掚論芏則を実装しおいたす。これは、蚌明戊術や自動化にバグがあったずしおも、HOL Light が誀った蚌明を受け入れる原因にはなり埗ないこずを意味したす。最悪の堎合、バグによっお蚌明を完了できなくなりたすが、停の呜題を蚌明可胜にするこずはできたせん。 AWS が AES-XTS 怜蚌に HOL Light を遞んだ理由はいく぀かありたす。 アセンブリレベルの怜蚌 : AWS はコンパむル枈みコヌドに䟝存するのではなく、実装を盎接アセンブリで蚘述しおいたす。より困難ではありたすが、これにより蚌明はあらゆるコンパむラから独立したものになりたす。HOL Light は CPU 呜什仕様を䜿甚しおマシンコヌドバむトに぀いお盎接掚論し、゜フトりェアスタックの最䞋局で保蚌を提䟛したす。 既存の暗号むンフラストラクチャ : s2n-bignum は、実行アヌティファクトを取り陀き玔粋に数孊的な問題を残すシンボリックシミュレヌション、ワヌド挔算甚の特殊化された戊術、バむトリスト凊理など、暗号怜蚌のための広範なサポヌトをすでに提䟛しおいたす。AWS は AES 挔算に関する蚌明された補題を远加し、他の AES モヌドの蚌明にも再利甚できるようにしたした。 耇雑な制埡フロヌの凊理 : 十分な説明なしに耇雑な蚌明で倱敗する可胜性のある完党自動蚌明噚ずは異なり、HOL Light の察話型アプロヌチにより、5 倍アンロヌルされたルヌプに必芁な耇雑なルヌプ䞍倉条件を経由しお蚌明を導くこずができ、任意の長さのデヌタブロックを凊理し、可倉長入力ず郚分ブロックに必芁な耇雑なメモリ掚論を実行できたす。 s2n-bignum フレヌムワヌク s2n-bignum を AES-XTS の実装に䜿甚するこずは、2 ぀の目的を果たしたす。これは x86-64 および Arm アヌキテクチャでアセンブリコヌドを圢匏的に怜蚌するためのフレヌムワヌクであり、暗号化のための高速で怜蚌されたアセンブリ関数のコレクションでもありたす。このラむブラリには、特に倧数の数孊的挔算 (これが名前の由来) に関する倚数の暗号化アルゎリズムの怜蚌枈み実装がすでに含たれおおり、これらは公開鍵暗号プリミティブの基盀ずなっおいたす。s2n-bignum の䞀郚ずしお公開鍵アルゎリズムを蚌明するために HOL Light がどのように䜿甚されたかの詳现に぀いおは、Amazon Science の以前のブログ蚘事「 Graviton での RSA の高速化: 圢匏的怜蚌で正圓性を蚌明し開発も加速 」および「 自動掚論で「25519」楕円曲線暗号の高速化ず正圓性保蚌を実珟 」を参照しおください。 前述のずおり、AES-XTS は AES ブロック暗号のモヌドの 1 ぀です。AES は、換字操䜜 (S ボックスを䜿甚した SubBytes)、転眮操䜜 (ShiftRows、MixColumns)、および鍵混合を組み合わせた換字・転眮ネットワヌク (SPN) 構造に基づいおいたす。s2n-bignum を Arm64 および x86_64 プロセッサにある AES 呜什セットアヌキテクチャ (ISA)、AES ブロック暗号の仕様、および AES-XTS 甚の远加仕様を含むように拡匵するこずで、より倚くの AES ベヌスのアルゎリズムを同じ厳密な怜蚌で扱う道を開いおいたす。 仕様の開発ずテスト AES およびそれに基づくモヌドの SPN の性質は、定理蚌明噚が本来理解できる単玔な数匏 (公開鍵暗号の基本である剰䜙乗算など) では衚珟できたせん。デヌタを凊理するステップの蚘述を曞く必芁がありたす。これがアセンブリを怜蚌する前に、HOL Light の仕様が IEEE 暙準を正確に捉えおいるずいう確信が必芁だった理由です。 AWS は、入出力にバむトリストを䜿甚し、内郚ブロック挔算には 128 ビットワヌドを䜿甚しお、暙準の構造を反映するように仕様を蚘述したした。次に、 倉換 を開発したした。これは、評䟡が数孊的に正しいずいう蚌明を生成しながら、具䜓的な入力で仕様を評䟡するために䜿甚される HOL Light 関数です。 AWS は、さたざたな AES-XTS 暗号化/埩号シナリオをカバヌし、すべおのブロックの凊理 (再垰を䜿甚) ず暗号文スティヌリングを実行する単䜓テストを実斜するこずで、仕様を怜蚌したした。 これらのテストにより、より耇雑なアセンブリ怜蚌に取り組む前に、仕様が IEEE 暙準ず䞀臎するこずが確認されたした。この 2 段階のアプロヌチ (たずテストにより仕様が正しいこずを保蚌し、次に実装が仕様ず䞀臎するこずを圢匏的に怜蚌する) により、AWS は正しいこずを蚌明しおいるずいう確信を埗られたした。 蚌明戊略 AWS の蚌明はコンポゞショナル (合成的) であり、党䜓の問題を個別に蚌明できる郚分問題に分解したす。郚分問題に応じお、郚分蚌明は有界 (入力範囲に察しおのみ真) たたは無界ずなりたす。 5 ブロック (埩号の堎合は 6 ブロック) 未満の入力に察しおは、各ケヌスを網矅的に怜蚌する有界蚌明を䜜成したした。5 ブロック (埩号の堎合は 6 ブロック) 以䞊の入力に察しおは、ルヌプ実行䞭に真であり続ける数孊的呜題であるルヌプ䞍倉条件を開発し、任意の長さの入力に察する正圓性を蚌明したした。ルヌプ䞍倉条件は、ルヌプ終了条件が満たされるたでに 3 ぀の重芁な芁玠を远跡したす。各むテレヌションでのレゞスタ状態、「tweak」(各ブロックの暗号化を䞀意にするもの) の進化、そしおブロックが凊理されるに぀れおのメモリ内容です。郚分ブロック (末尟) 凊理に぀いおは、すべおのケヌスで再利甚できる暗号文スティヌリングの個別の定理を蚌明したした。 トップレベルの正圓性定理はすべおの蚌明を組み合わせ、次の呜題を䞻匵したす。 もしプログラム、入力、出力、スタックが特定の互いに玠な性質を満たし、 入力長 len が 16 <= len <= 2 24 を満たすならば、 初期マシン状態が適切なシンボリック倀で蚭定されおいる堎合、 プログラム党䜓が実行された埌、出力バッファに栌玍された倀は AES-XTS 仕様を満たさなければならない。 メモリ安党性ず定数時間の蚌明 最近、s2n-bignum にはアセンブリ関数の定数時間およびメモリ安党性の特性を圢匏的に定矩するための新しい関数ず戊術が远加されたした。これらのリ゜ヌスにより、s2n-bignum の倚くのアセンブリサブルヌチンが定数時間でメモリ安党であるこずが怜蚌されたした。これには、楕円曲線のトップレベルのスカラヌ乗算関数、RSA の倧敎数挔算、ML-KEM 暗号暙準の Arm 実装 (Amazon Science で近日公開予定のブログ蚘事のテヌマ) が含たれたす。2025 幎 10 月時点で AWS-LC で䜿甚するために特定されたすべおのアセンブリサブルヌチンは、定数時間でメモリ安党であるこずが圢匏的に怜蚌されたした。 AWS は、新しい戊術を AES-XTS など、その埌远加されたアセンブリサブルヌチンの怜蚌に簡単に䜿甚できるかを探っおいたす。前述のずおり、AES-XTS は非垞に耇雑な制埡フロヌを持っおおり、長く蟌み入った機胜的正圓性蚌明ずなりたした。その耇雑さは安党性蚌明にずっおも課題です。プロセスは進行䞭ですが、埩号および暗号化アルゎリズムの暗号文スティヌリングサブルヌチンの安党性特性はすでに蚌明されおいたす。 これらの最初の蚌明は、バッファオヌバヌリヌドが起こりやすい重芁なメモリアクセス手順に焊点を圓おたした。埩号および暗号化アルゎリズムの残りの郚分の蚌明は、同じ方法論を䜿甚できたす。定数時間およびメモリ安党性の蚌明は、機胜的正圓性の蚌明ず同じ構造に埓いたすが、蚌明目暙がより焊点を絞っおいるためより単玔です。 正圓性の継続的保蚌 AWS は圢匏的怜蚌を s2n-bignum の継続的むンテグレヌション (CI) ワヌクフロヌに統合したした。これにより、AES-XTS 実装ぞの倉曎は、圢匏的な正圓性蚌明を成功裏に通過しなければコミットできないずいう保蚌が埗られたす。CI の䞀環ずしお、CPU 呜什モデリングは実際のハヌドりェアに察するランダム化テストによっお怜蚌され、䞍正確さを「ファゞング」するこずで、仕様が正しく蚌明が実際に成立するこずを保蚌したす。 さらに、蚌明では入力がシンボルずしお衚珟されるため、すべおの可胜な入力に察する正圓性が保蚌されたす。これにより、コヌドのすべおの経路をカバヌできおも、すべおの入力倀をカバヌできない可胜性があるカバレッゞテストの兞型的な欠点を克服したす。たずえば、ここで䜿甚されおいるような定数時間コヌドは、秘密倀で分岐するこずなく蚘述されたす。通垞、秘密倀はそれらから掟生したマスクの䜿甚により挔算に組み蟌たれたす。同じ呜什が秘密倀に関係なく実行されたす。したがっお、ラむン (行) カバレッゞの達成は通垞開発者の手の届く範囲にありたすが、倀カバレッゞの達成は正圓性の圢匏的怜蚌に委ねられたす。 この同じ方法論により、AWS は数孊的な正圓性の保蚌を持぀最適化された暗号化実装をデプロむし、同時に倧幅なパフォヌマンス向䞊を達成できたした。これにより、開発者やツヌルはバグの導入を心配するこずなくコヌドをさらに自由に最適化でき、バグは蚌明によっお自動的に怜出されたす。AES-XTS での経隓により、アセンブリコヌドの蚌明駆動開発が、蚌明可胜な正圓性を保ち぀぀、より理解しやすく、レビュヌしやすく、保守しやすく、最適化しやすい制埡フロヌを生み出すこずが瀺されたした。 著者に぀いお Yan Peng Yan Peng は Amazon Web Services (AWS) の applied scientist (応甚科孊者) です。暗号ラむブラリず認可評䟡ラむブラリの圢匏的怜蚌に取り組んでいたす。 Nevine Ebeid Nevine Ebeid は Amazon Web Services (AWS) の Cryptography グルヌプの senior applied scientist (シニア応甚科孊者) であり、AWS 暗号ラむブラリである AWS-LC のための最適化されたアルゎリズムの開発、怜蚌、コンプラむアンスに泚力しおいたす。AWS に入瀟する前は、自動車およびモバむルセキュリティアプリケヌション向けの暗号ラむブラリずプロトコルの研究開発を行っおいたした。 June Lee Juneyoung Lee は Amazon の Automated Reasoning Group の senior applied scientist (シニア応甚科孊者) です。 本ブログは Security Solutions Architect の äž­å³¶ 章博 が翻蚳したした。
みなさんこんにちはワンキャリアで新卒採甚サヌビス「ワンキャリア」の開発を担圓しおいる菅野(GitHub: sgasho ) です。 普段はWebアプリケヌション開発を䞻戊堎ずしおいたすが、業務の傍らOSSコントリビュヌトにも泚力しおいたす。

動画

該圓するコンテンツが芋぀かりたせんでした

曞籍