天天看點

區塊鍊中的數學(四十三)---基于橢圓曲線ECVRF證明生成

歡迎關注區塊鍊技術公衆号“blocksight”,更多精彩内容!

寫在前面

上一節說了基于RSA的VRF實作,繼承了RSA算法的簡潔性。

本文講基于橢圓曲線秘鑰體制的VRF實作,關于橢圓曲線算法的知識如果不熟悉,可先參考文末“相關閱讀”部分。

ECVRF

基于橢圓曲線實作的VRF記為ECVRF,滿足可信唯一性,可信抗碰撞性和全僞随機性(trusted uniqueness", "trusted collision resistance", "full pseudorandomness"),關于些安全性要求,在VRF概述章節中均有所介紹。

符号約定

F - 有限域

2n - 域元素位元組長度,向上取整

E - F上的橢圓曲線

ptLen - 橢圓曲線點編碼成字元串長度

G - E上大素數子群

q - 群G的素數階

qLen - q的位元組長度

cofactor - E曲線點數除q 即諧因子

B - G生成元

suite_string - 辨別 ECVRF套件(ciphersuite),包含上述選項參數

SK - VRF私鑰

x - VRF秘密整數标量(根據不同的曲線類型,有可能等于SK,也有可能從SK派生)

Y = x*B - VRF 公鑰

證明生成過程

方法1: ECVRF_prove(SK, alpha_string)

參數:

SK - VRF 私鑰

alpha_string - 原始消息

傳回值:

pi_string - 長度為k的證明字元串

執行主要過程:

  1. 使用 SK 派生出 VRF 密鑰x, 計算VRF公鑰 Y = x * B(依賴具體曲線執行個體或有不同)
  2. 計算H = ECVRF_hash_to_curve(suite_string, Y, alpha_string)
  3. 将H轉化為string,g = point_to_string(H)
  4. 令Gamma = x * H
  5. 計算k = ECVRF_nonce_generation(SK, h_string)
  6. 計算c = ECVRF_hash_points(H, Gamma, kB, kH)
  7. 計算s = (k + c*x) mod q
  8. 拼接證明:pi_string = point_to_string(Gamma) || int_to_string(c, n) || int_to_string(s, qLen)
  9. 傳回 pi_string

方法2: ECVRF_proof_to_hash(pi_string)

參數:

pi_string -- VRF 證明結果

傳回值:

beta_string - VRF Proof 哈希值

執行主要過程:

  1. 還原proof結構,D = ECVRF_decode_proof(pi_string)
  2. 驗證D正确性,若非法則停止
  3. 解構D: (Gamma, c, s) = D
  4. 令 three_string = 0x03 = int_to_string(3, 1)
  5. 計算哈希:beta_string = Hash(suite_string || three_string || point_to_string(cofactor * Gamma))
  6. 傳回結果 beta_string

可以看到,其實核心步驟是5,來計算最終hash

下面重點說下,證明生成過程中用到的輔助方法。

重要方法說明

  1. ECVRF_hash_to_curve

    該方法将傳入的原始資訊結合曲線suite參數計算哈希,并将結果哈希映射到曲線上的點, 不同的橢圓曲線有不同的實作方法。

  2. ECVRF_nonce_generation

    從SK和其他輸入中派生出一個僞随機數

  3. ECVRF_hash_points

    對傳入的橢圓曲線的若幹點做哈希運算

  4. point_to_string

    橢圓曲線的點轉成字元串,與之對應的還有下面方法。

  5. string_to_point

    字元串轉成橢圓曲線的點

小結

本文主要介紹了VRF基于ECC公鑰體制的證明生成過程, 其中涉及多個輔助方法,這些方法隻是做了簡要的介紹,因為詳細說明每個方法會有很多内容,先搞清楚主要過程,後續有時間再細說。

好了,證明有了,如何驗證是否合法呢?

下一篇繼續說基于橢圓曲線公鑰體制的VRF證明驗證過程!

歡迎關注&在看, 疑問請留言!

歡迎關注區塊鍊技術公衆号“blocksight”,更多精彩内容!

相關閱讀:

區塊鍊中的數學(四十二) [基于RSA的VRF實作]

區塊鍊中的數學(十六) RSA簽名過程!

區塊鍊中的數學(十二) RSA加解密原理

區塊鍊中的數學(四十一) VRF(随機可驗證函數)概述

區塊鍊中的數學(四十) 目錄整理,快速發現你感興趣的内容!

區塊鍊中的數學(三十九) Uniwap核心算法解析-完結篇

區塊鍊中的數學(三十八) Uniwap核心算法解析(下)

區塊鍊中的數學(三十七) Uniwap核心算法解析(中)

區塊鍊中的數學(三十六) Uniwap自動化做市商核心算法解析(上)

區塊鍊中的數學(二) 射影平面與橢圓曲線方程

區塊鍊中的數學(三) 橢圓曲線上的群及代數運算

區塊鍊中的數學(四) 離散域模素數上的加法&橢圓曲線中離散對數問題

區塊鍊中的數學(五) 橢圓曲線加密原理和執行個體演練

區塊鍊中的數學(六) 橢圓曲線進行簽名和驗證過程