USER GUIDE / SECURITY / SC RSA / OPERATION GUIDE

操作说明

配置流程

以加密配置过程为例(加密和解密配置过程相同),介绍寄存器配置过程,具体描述如下。

步骤一:设置 RSAC.RSA_N_LEN 寄存器,配置 N 的长度。

步骤二:设置 RSAM,配置明文或密文。

步骤三:设置 RSAE,配置密钥。

步骤四:设置 RSAN,配置 N。

步骤五:读信号 RSAINFO.RSA_N_CFG_DONE,当该值为 1 时,表示数据配置写入完成。

步骤六:将 1 写入 RSA_CLR.RSA_N_CFG_CLR 清除中断。

步骤七:配置 RSAC.RSA_EN 为 1,启动 RSA。

步骤八:等待计算完成,即读取 RSA_INFO.RSA_INT_DONE。如果是 1,则计算完成。

步骤九:将 1 写入 RSA_CLR.RSA_INT_CLR 清除中断。

步骤十:RSADBG1.P_LENGTH,表示最终数据的有效长度

步骤十一:根据步骤 10 中获得的长度从 RSAP 中读取最终数据,第一个读取的数据是最低的 32 位,最后一个读取的数据是最高的 32 位。另外,也可以不看步骤 10,而是根据加解密的长度去读取。

注意事项

注意:
  1. 如果需要连续多次配置不同长度的加解密的话,在配置 N 的长度之前应先清除 0x0 寄存器的[10:4] 位,避免 N 的长度配置错误。
  2. 不支持密钥 RSAE 为 0 的场景
  3. 严格遵循上述寄存器配置。在写 E 和 M 时,无论实际长度如何,都必须按照 4096 位写入,即填充高阶零。例如,当 M 的有效位为 32 位时,0x0C 寄存器仍然需要写入 128 次,同时 M 的数据从高位写到低位,也就是说,需要将数据 0 写入 0x0C 寄存器 127 次,最后写入低 32 位。写 N 时,写次数必须和其有效长度相同。
  4. 复位 RSA 模块时:
    步骤一:软件需配置 RSARSTN.RSTN 为 0。
    步骤二:等到 RSARSTN.RSTN 为 1 代表 RSA 复位结束,此时 RSA 已处于空闲状态,软件可按照上述寄存器配置流程启动 RSA。

举例

P = ME (mod N)
rsa_2048
G = RSA(E,N,M)
M = RSA(D,N,G)
test_E[64] = {0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000,0x00010001};
test_N[64] = {0x9031555B, 0xCFF9F82A, 0x9A79E7AF, 0x71D2E090, 0x7002449A, 0x1CFCE88D,
0x089D7673, 0x6170D05A, 0xDF2E19A0, 0xB6493896, 0xFE0D23C4, 0x66803BE4, 0x9F8873FD,
0x861FD5D5, 0x0921C345, 0x8DA29C71, 0x959E3BB7, 0x89070782, 0x213D8F67, 0x3AE9F27E,
0xAA642796, 0x6B38F1A1, 0xA1C6E822, 0xBEA312B1, 0x33603529, 0x91EB4582, 0x8DC65258,
0x7228FCDA, 0x7225CEEB, 0x6105E9BC, 0x4C64349D, 0x1440668C, 0xB61AD963, 0x1953EC79,
0x3F0D2CD6, 0x144990EA, 0xEBC1606F, 0x44AA0258, 0x8A0D3805, 0xF8577777, 0x99B5127F,
0x8C64242E, 0x98B2B7B5, 0xF22758CB, 0xB05D362F, 0xF3B314DF, 0x326D3C15, 0x2D4317C2,
0x36AA4983, 0x649CEFE0, 0x4DC0BE08, 0x77B02201, 0x976666C6, 0x3525107A, 0x630A912F,
0xD8A494F7, 0x83AA3AF1, 0x3FF673EF, 0x650AB63E, 0x0B9B7AE0, 0xAD78920F, 0x4256F551,
0xB1119714, 0x0CAA01B9};
test_D[64] = {0x8639462A, 0x1729ABB7, 0x8CE0D9A8, 0xD99DE168, 0xD2BB69BC, 0xC42B3116,
0xC7E43C35, 0x1F89728A, 0x84A2573C, 0xE132BBB8, 0xE278BCC8, 0xC059B267, 0x19925DD6,
0xAC19CA65, 0x6B00C0D3, 0x680AECF2, 0x56C25AF8, 0x7857D0C7, 0x73C5E84D, 0xC1EBB0CD,
0xF433131E, 0xD464C799, 0x1C0D1A5D, 0xED73C39C, 0xAC246C98, 0x6BBAC493, 0xC901C9F9,
0x871B5C74, 0xC43929AA, 0xB64058D9, 0xED8A81E7, 0x8EC87C2C, 0x2C8D7551, 0xEB42F373,
0x4CE81716, 0x74CD098E, 0x3F1981AC, 0x5742C5F4, 0xA3401F9E, 0xB04FFA8D, 0x2192C911,
0x30CC290A, 0x755C1EEC, 0x62C14345, 0x5712E8DA, 0x5FBCEA5B, 0x0237409A, 0x4437B99C,
0x9E815CEA, 0x103C0DDC, 0x694B69AC, 0xCC64C4D5, 0x80617760, 0x9CE5E1AD, 0x4F43F6FD,
0x4E07540C, 0xE4CD7A32, 0xDABC470B, 0x65840A7D, 0x84563560, 0x37662FB9, 0x902F1059,
0x6D99AD6F, 0x88848CF9};
test_M[64] = { 0x00153524, 0xc0895e81, 0x8484d609, 0xb1f05663, 0x06b97b0d, 0x46df998d,
0xb2c28465, 0x89375212, 0x00f3e301, 0x06d7cd0d, 0x3b23f176, 0x1e8dcd3d, 0x76d457ed,
0x462df78c, 0x7cfde9f9, 0xe33724c6, 0xe2f784c5, 0xd513d2aa, 0x72aff7e5, 0xbbd27277, 0x8932d612,
0x47ecdb8f,0x793069f2,0xe77696ce,0xf4007ae8,0xe2ca4ec5,0x2e58495c,0xde8e28bd,0x96ab582d,
0xb2a72665, 0xb1ef6263, 0x0573870a, 0x00153524, 0xc0895e81, 0x8484d609, 0xb1f05663,
0x06b97b0d, 0x46df998d, 0xb2c28465, 0x89375212, 0x00f3e301, 0x06d7cd0d, 0x3b23f176,
0x1e8dcd3d, 0x76d457ed, 0x462df78c, 0x7cfde9f9, 0xe33724c6, 0xe2f784c5, 0xd513d2aa, 0x72aff7e5,
0xbbd27277, 0x8932d612, 0x47ecdb8f, 0x793069f2, 0xe77696ce, 0xf4007ae8, 0xe2ca4ec5,
0x2e58495c,0xde8e28bd,0x96ab582d, 0xb2a72665,0xb1ef6263,0x0573870a};
test_G[64] = {0x7dcd43e9, 0x78847d82, 0x03413d71, 0x608d5b24, 0x4fd8dce3, 0xc66d8565,
0xc59c0bc8, 0x73b6a969, 0xca9abdb7, 0x519f55dd, 0x9a05be30, 0xad5fa59c, 0x337f3c1d,
0x24e7e9c4, 0x6a385957, 0x5c8e925c, 0x57f892ad, 0xdf20bf8e, 0x3c440c2c, 0x39907f2f,
0xe0617c55, 0x169bac29, 0x5b296e2e, 0xb18340b3, 0xcae7495e, 0x380d399e, 0x18c5da94,
0x474d76ee,0x3cce2c92,0x40490247,0xbb36e638,0x26b5f55e, 0x154bf3b2,0x01964fbb, 0x77916f25,
0xd2b37217, 0x073a03f8, 0x171ecef7, 0x5ff29f1e, 0x45054f1e, 0x5462bdf1, 0xbd5d7c1c, 0x24ca96f7,
0x16b74b6c,0xb01671de,0xb5b0bd24, 0x8eb2d0ba,0x05e29502,0x2b13225e, 0x5f0e8fc1};

注意:写 RSAE/RSAM 时,必须将高位补 0 到 128 个 word。