メインコンテンツまでスキップ

デフォルトで量子耐性

QoreChain はポスト量子暗号を第一級の署名方式として扱います。 アカウントはML-DSA-87(Dilithium-5、NIST FIPS 204)鍵をオンチェーンに登録し、 その後トランザクションはハイブリッド署名(通常の 古典的な secp256k1 署名に加えて ML-DSA-87 署名)を持つことができます。チェーンの ante handler は両方を検証するため、量子耐性アカウントは古典的な検証と完全な互換性を保ちながら、 将来の量子敵対者に対する保護を獲得します。

SDK はこれを小さく冪等な API にまとめており、dApp は デフォルトで量子耐性になります。PQC で保護するための呼び出しはたった 1 回です。

ステータスの確認

isPqcRegistered / getPqcStatus は、qor_getPQCKeyStatus JSON-RPC メソッドを介して アドレスに登録済みの PQC 鍵があるかどうかを読み取ります。これらは QorClient または createClient で合成したクライアントのいずれかを受け取ります:

import { createClient, isPqcRegistered, getPqcStatus } from "@qorechain/sdk";

const client = createClient({ network: "mainnet", endpoints: { /* … */ } });

const safe = await isPqcRegistered(client, "qor1…");
const status = await getPqcStatus(client, "qor1…");
// status: { registered: boolean; algorithmId?: number; pubkey?: string | Uint8Array }

同じステータスは EVM 側でも、 0x0000000000000000000000000000000000000A02 にある pqcKeyStatus(address) returns (bool registered, uint8 algorithmId, bytes pubkey) プリコンパイル(@qorechain/evm では pqcKeyStatus として公開)を介して読み取れます。 上記のヘルパーは viem ピアを必要としない JSON-RPC メソッドを優先します。

1 回の呼び出しで登録

ensurePqcRegistered はアカウントを量子耐性にします。これは冪等です。ステータス ソースを渡すと、鍵がすでに登録されている場合は登録をスキップするため、 アプリ起動のたびに呼び出しても安全です。

import { generatePqcKeypair, ensurePqcRegistered } from "@qorechain/sdk";

const tx = await client.connectTx(signer);
const pqcKeypair = generatePqcKeypair(); // or derive deterministically from the wallet

const res = await ensurePqcRegistered(tx, {
pqcKeypair,
statusSource: client, // makes the call idempotent (skips if already registered)
});
// res: { alreadyRegistered: boolean; txHash?: string }

内部では、署名者の Dilithium 公開鍵(pqcKeypair から)に加えて、オプションで アカウントの ECDSA 公開鍵を用いて MsgRegisterPQCKey を構築しブロードキャストします。

ハイブリッド署名

migrateToHybrid は登録を保証し、既存の buildHybridTx / signAndBroadcastHybrid ビルダーに鍵ペアを事前バインドしたハイブリッド送信パスを返します:

import { migrateToHybrid } from "@qorechain/sdk";

const hybrid = await migrateToHybrid(tx, { pqcKeypair, statusSource: client });

await hybrid.signAndBroadcastHybrid({
registry,
signer, // classical secp256k1 direct signer
messages,
fee,
chainId,
accountNumber,
sequence,
transport, // a connected broadcast transport (e.g. StargateClient)
});

鍵のローテーション

PQC 鍵をローテーションする必要がある場合(アルゴリズムのアップグレードや鍵の漏洩)は、 migratePqcKey を使用します。これは古い鍵と新しい鍵の両方の所有を証明する MsgMigratePQCKey をブロードキャストします:

import { migratePqcKey } from "@qorechain/sdk";

await migratePqcKey(tx, {
oldPublicKey,
newPublicKey,
oldSignature, // by the old key
newSignature, // by the new key
});

UI 内で

@qorechain/react キットはこれらすべてを React で公開しています。 usePqcStatus フックと <QuantumSafeBadge/> コンポーネントは、接続中のアカウントに 登録済みの PQC 鍵がある場合に量子耐性インジケーターを表示します。