Saltar al contenido principal

Seguridad cuántica por defecto

QoreChain trata la criptografía poscuántica como un esquema de firma de primera clase. Una cuenta registra en cadena una clave ML-DSA-87 (Dilithium-5, NIST FIPS 204), tras lo cual sus transacciones pueden llevar una firma híbrida — la habitual firma clásica secp256k1 más una firma ML-DSA-87. El ante handler de la cadena verifica ambas, de modo que una cuenta con seguridad cuántica permanece totalmente compatible con la verificación clásica al tiempo que gana protección frente a un futuro adversario cuántico.

El SDK empaqueta esto en una superficie diminuta e idempotente para que una dApp se vuelva segura frente a lo cuántico por defecto: una sola llamada para estar protegido con PQC.

Comprobar el estado

isPqcRegistered / getPqcStatus leen si una dirección tiene una clave PQC registrada mediante el método JSON-RPC qor_getPQCKeyStatus. Aceptan ya sea un QorClient o el cliente compuesto de 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 }

El mismo estado también se puede leer desde el lado EVM mediante el precompilado pqcKeyStatus(address) returns (bool registered, uint8 algorithmId, bytes pubkey) en 0x0000000000000000000000000000000000000A02 (expuesto como pqcKeyStatus en @qorechain/evm). Las utilidades anteriores prefieren el método JSON-RPC, que no necesita ningún par de viem.

Registrar en una sola llamada

ensurePqcRegistered hace que una cuenta sea segura frente a lo cuántico. Es idempotente: pasa una fuente de estado y omite el registro cuando la clave ya está registrada, de modo que es seguro llamarla en cada arranque de la app.

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 }

Internamente construye y difunde MsgRegisterPQCKey con la clave pública Dilithium del firmante (de pqcKeypair) más, opcionalmente, la clave pública ECDSA de la cuenta.

Firmar de forma híbrida

migrateToHybrid garantiza el registro y devuelve una ruta de envío híbrida con el par de claves preenlazado a los constructores existentes 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)
});

Rotar una clave

Si necesitas rotar la clave PQC (actualización de algoritmo o una clave comprometida), usa migratePqcKey, que difunde MsgMigratePQCKey demostrando la posesión tanto de la clave antigua como de la nueva:

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

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

En la interfaz de usuario

El kit @qorechain/react expone todo esto en React: el hook usePqcStatus y el componente <QuantumSafeBadge/> muestran un indicador de seguridad cuántica siempre que la cuenta conectada tenga una clave PQC registrada.