Skip to main content

Wallet SSS Architecture 安全问题共享者

使用安全问题作为一个恢复密钥的因素

看上去是使用用户的输入作为一个共享者, okx-threshold-lib 中 共享者 ui

alt text

是的,图片中的内容提到了一种使用确定性共享(Deterministic Share)进行密钥生成的方法,这种方法可以作为支持用户恢复密钥的一个因素。具体来说,这里提到的确定性共享涉及到使用用户输入(例如安全问题的答案)来预先确定秘密共享方案(SSS)多项式中的一个共享。这种方法的主要目的是在密钥恢复过程中增加安全性和可靠性。

详细解释

  1. 用户输入和确定性共享

    • 用户提供一个输入(例如答案),这个输入可以用来预先确定 SSS 多项式中的一个共享。
    • 通过使用一个加密安全的哈希函数HH,我们可以将用户输入映射到一个共享值。
    • 例如,给定f(z3)=H(input)f(z_3) = H(input),我们可以选择一个σ\sigma并求解a1=f(z3)σz3a_1 = \frac{f(z_3) - \sigma}{z_3}
  2. 秘密重新共享中的确定性生成

    • 在秘密重新共享的过程中,也可以使用给定的σ\sigma和用户输入来确定性地生成新的多项式f(z)f(z)
    • 这种方法允许我们将nn个给定的值绑定到密钥或共享,只要nd+1n \leq d + 1,其中dd是 SSS 多项式的度。
  3. 确保输入的熵

    • 为了保证输入具有足够的熵,可以使用多个安全问题(例如三个问题)的答案来生成输入。
    • 例如,使用答案A,B,CA, B, C来派生输入input=ABCinput = A|B|C
    • 这些问题和答案的顺序和索引可以在元数据中定义。
  4. 合适的问题类型

    • 建议使用具有确定性答案的问题(例如“你父母的生日”或“你出生的城市”),而不是“你最喜欢的歌手是谁”这样的问题。
    • 为了适应用户可能会忘记答案的情况,可以将答案本身通过 SSS 分割,使用户可以回答 3/5 个问题,从而提供冗余。

具体步骤示例

假设用户使用安全问题的答案来生成确定性共享:

  1. 选择安全问题

    • 选择三个具有确定性答案的安全问题,例如:
      • 你父母的生日是什么?
      • 你出生的城市是哪里?
      • 你的第一辆车的品牌是什么?
  2. 用户提供答案

    • 用户提供答案A,B,CA, B, C
  3. 生成输入

    • 将答案组合生成输入input=ABCinput = A|B|C
  4. 生成确定性共享

    • 使用哈希函数HH生成共享值f(z3)=H(input)f(z_3) = H(input)
    • 选择一个σ\sigma并求解a1=f(z3)σz3a_1 = \frac{f(z_3) - \sigma}{z_3}
  5. 使用确定性共享进行密钥恢复

    • 在密钥恢复过程中,用户可以再次提供相同的答案来生成相同的共享,从而恢复密钥。

总结

通过使用确定性共享的方法,可以在用户恢复密钥的过程中增加一个安全因素。这种方法利用用户的输入(例如安全问题的答案)来生成预先确定的共享,从而在密钥恢复过程中提供额外的安全性和可靠性。这种方法特别适用于需要高安全性和用户友好的密钥管理系统。