gmkitx API - v0.10.1
    正在准备搜索索引...

    变量 sm2KeyExchange常量

    sm2KeyExchange: (params: SM2KeyExchangeParams) => SM2KeyExchangeResult = sm2Functions.keyExchange

    执行 SM2 密钥交换;参与方角色、用户标识和派生长度见 SM2KeyExchangeParams

    类型声明

      • (params: SM2KeyExchangeParams): SM2KeyExchangeResult
      • SM2 密钥交换协议

        标准参考:

        • GM/T 0003.3-2012: SM2 椭圆曲线密钥交换协议
        • GM/T 0009-2023: SM2 密码算法使用规范

        这是一个安全的密钥协商协议,允许两方在不安全的通道上协商出共享密钥。

        协议流程:

        1. 发起方 A 生成临时密钥对 (rA, RA),发送 RA 给响应方 B
        2. 响应方 B 生成临时密钥对 (rB, RB),发送 RB 给发起方 A
        3. 双方各自计算共享密钥 K
        4. 可选:双方交换确认哈希值进行相互认证

        安全特性:

        • 前向保密:即使长期私钥泄露,历史会话密钥仍然安全
        • 相互认证:可选的确认哈希值提供身份验证
        • 抗中间人攻击:需要长期密钥对的参与

        参数

        返回 SM2KeyExchangeResult

        密钥交换结果,包含临时公钥、共享密钥和可选的确认哈希值

        // 双方先生成长期密钥对和本次会话的临时密钥对。
        const keyPairA = generateKeyPair();
        const keyPairB = generateKeyPair();
        const tempKeyPairA = generateKeyPair();
        const tempKeyPairB = generateKeyPair();

        const resultA = keyExchange({
        privateKey: keyPairA.privateKey,
        publicKey: keyPairA.publicKey,
        peerPublicKey: keyPairB.publicKey,
        tempPrivateKey: tempKeyPairA.privateKey,
        peerTempPublicKey: tempKeyPairB.publicKey,
        isInitiator: true
        });

        const resultB = keyExchange({
        privateKey: keyPairB.privateKey,
        publicKey: keyPairB.publicKey,
        peerPublicKey: keyPairA.publicKey,
        tempPrivateKey: tempKeyPairB.privateKey,
        peerTempPublicKey: tempKeyPairA.publicKey,
        isInitiator: false
        });

        if (resultA.sharedKey !== resultB.sharedKey) {
        throw new Error('SM2 密钥交换结果不一致');
        }