Loading article…
AES暗号化、SHAハッシュ計算、乱数生成などの暗号化プリミティブの効率的な計算を支援するためにx86 命令セットに追加された命令。
Intel AES の指示
6つの新しい指示。
CLMUL の指示
RDRAND と RDSEED
- ^ ab CPUの乱数生成器がこれらの命令の発行に追いつけない場合、および 命令
RDRANDはRDSEED乱数の取得と返送に失敗する可能性があります。この場合、ソフトウェアは命令を再試行します(ただし、再試行回数は前進を確実にするために制限する必要があります[1])。乱数が正常に取得された場合、命令はEFLAGS.CF1に設定され、それ以外の場合は0に設定されます。乱数の取得に失敗すると、命令の宛先レジスタも0に設定されます。
Intel SHA命令
7つの新しい指示。
Intel キーロッカーの説明
Tiger Lake以降の Intel プロセッサで利用可能なこれらの命令は、実際の暗号化/復号化プロセス中にキーの暗号化されていないコピーにアクセスすることなく、AES キーによる暗号化/復号化を可能にするように設計されています。
- ^ EAX レジスタ内の命令
に使用できるフラグは次のとおりです。
LOADIWKEY - ^ およびへの明示的なソース引数に使用できるハンドル制限は次のとおりです。
ENCODEKEY128ENCODEKEY256 - ^ abcdefgh AES Key Locker のすべてのエンコード/デコード命令は、ハンドルが現在の IWKey に対して有効かどうかを確認し、ハンドルが有効な場合にのみデータをエンコード/デコードします。これらの命令は、提供されたハンドルが有効であったか (ZF=0)、そうでなかったか (ZF=1) を示す ZF フラグを設定します。
VIA PadLockの説明書
VIA/Zhaoxin PadLock 命令は、8086 の繰り返し文字列命令と同様に、暗号化プリミティブを一括して適用するように設計された命令です。したがって、特に指定がない限り、ES:rSI のソース データへのポインタと ES:rDI の宛先データへのポインタ、および rCX のデータ サイズまたはカウントが適宜使用されます。古い文字列命令と同様に、これらはすべて割り込み可能に設計されています。[2]
脚注
- ^ ハイフン付きで記載されている命令ニーモニックについては、VIA PadLock ドキュメントによって命令名にハイフンがあるかどうかが異なります (例: ACE プログラミング ガイドのバージョン 1.0 ではハイフンが使用されていますが[3] 、 v1.66 では使用されていません。[2] )。また、アセンブラでは、ハイフン付きまたはハイフンなしの命令ニーモニックを受け入れる場合があります。例: GNU Binutils rev 2.17 以降では、どちらも受け入れます。一部のアセンブラでは、以外の命令についてはプレフィックスがオプションであると
見なす場合もあります。このようなアセンブラでは、アセンブリ命令がプレフィックス バイト付きで記述されているかどうかに関係なく、PadLock 命令は 1 つの( ) プレフィックス バイト付きでアセンブルされます(プレフィックスは を除くすべての PadLock 命令で必須です)。REPXSTOREF3REPREPF3XSTORE - ^ PadLockをサポートする一部のプロセッサでは、
REP XSTOREECXで指定されたバイト数だけでなく、最大7バイトまでの追加バイトも書き込むことができます。[4] - ^ の 制御ワードは、
REP XCRYPT*次のレイアウトを持つ 16 バイト (128 ビット) のデータ構造です。 非整列データを許可するためにビット 5 が設定されている場合、REP XCRYPT*命令は制御ワードの直後の 112 バイトをデータの再整列用のスクラッチパッド メモリ領域として使用します。 - ^ 新しい命令に加えて
REP XCRYPT-CTR、ACE2 では他のREP XCRYPT命令にも追加機能が追加されています。CBC 命令と CFB 命令のダイジェスト モード、および非 ECB 命令で 16 バイト境界に揃えられていない入出力データを使用できる機能です。 - ^ VIA Nano以降のプロセッサでは、命令のrAXをすべて1の値に設定すると、rCXが64バイトブロックの数を指定し、ハッシュ計算の最後にある標準のFIPS-180-2長さ拡張手順が省略される代替操作モードが有効になります。これにより、元のEAX = 0バリアントよりもデータストリーミングに適したバリアントになります。[6]この機能はにも存在します。
REP XSHA*CCS_HASH
- ^ この
REP MONTMUL命令は、32 ビットの AddressSize でのみサポートされます。このため、アドレス サイズ オーバーライド プレフィックス (67h) は、16 ビット モードと 64 ビット モードでは必要ですが、32 ビット モードでは使用できません。 - ^ データ構造には
REP MONTMUL6 つの 32 ビット要素が含まれており、最初の要素は係数の下位 32 ビットの否定モジュラー逆数であり、残りの 5 つはさまざまなメモリ バッファーへのポインターです (各バッファーは ES セグメントを使用し、16 バイト境界に揃える必要があります)。 - ^ ab CCS命令は、Zhaoxinのさまざまなソースで異なるニーモニックでリストされています。たとえば、
CCS_SM3/CCS_SM4ニーモニックは2019年の記事で使用されていますが、[9] 2020年の記事では/CCS_HASHが使用されています。 [7]CCS_ENCRYPT - ^ rAX の制御ワード
CCS_ENCRYPTの形式は次のとおりです。rAX の残りのビットはすべて 0 に設定する必要があります。
rAX (ブロック モード選択) のビット 10:6 のうち、正確に 1 つのビットを設定する必要があります。そうでない場合、動作は未定義になります。
- ^ 命令の EDX のビット 5:0 でサポートされている機能は次
SM2のとおりです。
参考文献
- ^ Intel、デジタル乱数ジェネレーター (DRNG) ソフトウェア実装ガイド rev 2.1、2018 年 10 月 17 日、セクション 5.2 および 5.3。2021 年 11 月 19 日にアーカイブ。
- ^ ab VIA、PadLock プログラミング ガイド、rev 1.66、2005 年 8 月 4 日。2010 年 5 月 26 日時点のオリジナルよりアーカイブ。
- ^ VIA、Nehemiah Advanced Cryptography Engine Programming Guide、v1.0、2004年。2004年9月17日時点のオリジナルよりアーカイブ。
- ^ VIA、Nehemiah Random Number Generator Programming Guide、v1.0、2003、9ページ。2004年9月17日時点のオリジナルよりアーカイブ。
- ^ Michal Ludvig、「VIA PadLock—Wicked Fast Encryption」、Linux Journal、2005 年 4 月 6 日。2005 年 6 月 20 日にアーカイブ。
- ^ Stack Overflow、「VIA の Padlock ハッシュ エンジンを使用したストリーミング SHA 計算?」、2014 年 8 月 11 日。2019 年 6 月 14 日にアーカイブ。Stack
Overflow の回答で参照されている PadLock SDK (v3.1) は、Crypto++ wiki (2023 年 8 月 11 日にアクセス) または Wayback Machine からダウンロードできます。 - ^ ab Zhaoxin、コアテクノロジー | Zhaoxinプロセッサに基づく国家暗号化アルゴリズムの高速化命令の使用手順(中国語)、2020年8月8日。2022年1月5日にアーカイブ。
- ^ Zhaoxin、GMI ユーザーマニュアル v1.0(中国語)、2016年5月23日。2022年2月28日にアーカイブ。
- ^ ab Zhaoxin、「Zhaoxin CPUに基づくハードウェアアクセラレーションと国家暗号アルゴリズムの応用に関する研究」(中国語)、2019年9月3日。2020年8月11日にアーカイブ。
- ^ Binutils メーリング リスト、(PATCH v1) x86: ZHAOXIN GMI 命令のサポート、2024 年 10 月 14 日、Zhaoxin 提供の命令ドキュメントについては、「ZX_GMI_Reference.docx」添付ファイルを参照してください
SM2。2024 年 11 月 9 日にアーカイブされました。添付ファイルは 2024 年 11 月 9 日にアーカイブされました。
