中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python實現VRF的方法

發布時間:2020-05-25 10:45:02 來源:億速云 閱讀:251 作者:Leah 欄目:編程語言

今天小編就為大家帶來一篇有關Python實現VRF的文章。小編覺得挺實用的,為此分享給大家做個參考。一起跟隨小編過來看看吧。

Python實現VRF的方法

        VRF基于公鑰體系,從目錄可以看出有RSAEC兩個版本,本文帶大家走一遍RSA版本的實現,由于算法持續更新,本文采用最早的00版本進行講解,并以Python實現。

整個體系涉及如下7個函數:

1RSAFDHVRF_prove(K,alpha)

2MGF1(mgfSeed,maskLen)

3OS2IP(x)I2OSP(x)

4RSASP1(K,m)

5RSAFDHVRF_proof2hash(pi)

6RSAFDHVRF_verify((n,e),alpha,pi)

7RSAVP1((n, e), s)


  •         RSAFDHVRF_prove(K,alpha)

        可以看到函數的定義 

Python實現VRF的方法


        輸入:密鑰和待簽名的消息。注意,密鑰在代碼中的表現形式通常是類或對象,而不是字符串,那么該對象中哪些具體的屬性參與計算呢,稍后介紹。 

Python實現VRF的方法


  •         MGF1(mgfSeed,maskLen)

Python實現VRF的方法

 Python實現VRF的方法

Hash默認算法是SHA1


  •         OS2IP(x)I2OSP(x)

        這兩個函數就沒必要按照論文中定義的邏輯寫了,每個語言都有類似的系統自帶方法可以簡單實現,知道它倆做什么即可。  

Python實現VRF的方法

  •         RSASP1(K,m) 


Python實現VRF的方法

        看似復雜,其實你會發現如果是形式a一行代碼就能實現。所以本文開篇提到的RSA密鑰對象,只要存儲(n,d,e)就夠了。所以這個算法需要定義alpha輸入,生成RSA密鑰,定義Hash算法,如圖: 

Python實現VRF的方法


  •         RSAFDHVRF_proof2hash(pi) 

Python實現VRF的方法


這個就比較簡單了,一行代碼足以。 

Python實現VRF的方法


  •         RSAFDHVRF_verify((n,e),alpha,pi)

        基本和prove就是個逆運算

Python實現VRF的方法


  •         RSAVP1((n, e), s) 

Python實現VRF的方法

        也比較簡單,你會發現和前面的RSAVP1類似,RSA密鑰(n,d,e)的運算都比較直接。


        以上就是RSAVRF最簡版實現,完整代碼如下:

import math

import struct

import hashlib

import binascii

from Crypto.PublicKey import RSA



def rsasp1(K, m):

    if not (0 <= m <= K['n']-1):

        raise Exception("message representative out of range")

    return pow(m, K['d'], K['n'])


def rsavp1(K,s):

    if not (0 <= s <= K['n']-1):

        raise Exception("message representative out of range")

    return pow(s, K['e'], K['n'])    


def i2osp(x):

    try:

        return struct.pack('I',x)

    except:

        return binascii.unhexlify( len(hex(x)[2:])%2*'0' + hex(x)[2:])


def os2ip(x):

    return int(binascii.hexlify(x), 16)


def mgf1(mgf_seed, mask_len,Hash=hashlib.sha1):

    T = b''

    for i in range(math.ceil(mask_len/Hash().digest_size)):

        C = i2osp(i)

        T = T + Hash(mgf_seed.encode() + C).digest()

    return T[:mask_len]


def rsafdhvrf_prove(K, alpha):

    EM = mgf1(alpha, k-1)

    m = os2ip(EM)

    s = rsasp1(K, m)

    pi = i2osp(s)

    return pi


def rsafdhvrf_proof2hash(pi, Hash=hashlib.sha1):

    beta = Hash(pi).digest()

    return beta


def rsafdhvrf_verify(K, alpha, pi):

    s = os2ip(pi)

    m = rsavp1(K, s)

    EM = i2osp(m)

    EM_ = mgf1(alpha, k-1)

    if EM == EM_:

        return "VALID"

    else:

        return "INVALID"


alpha = 'YOUCHAIN'

k = hashlib.sha1().digest_size

rsa = RSA.generate(1024)

K = {'e':rsa.e, 'n':rsa.n, 'd':rsa.d}

pi = rsafdhvrf_prove(K, alpha)

beta = rsafdhvrf_proof2hash(pi)

result = rsafdhvrf_verify(K, alpha, pi)

print(result)


看完上述內容,你們掌握Python實現VRF的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

衡阳市| 南木林县| 吉林省| 阜康市| 浠水县| 交口县| 彭州市| 紫金县| 盐津县| 辽源市| 泗水县| 麻城市| 山阳县| 辽阳县| 沭阳县| 蒲城县| 河东区| 家居| 达孜县| 泗洪县| 黄骅市| 宾阳县| 云南省| 银川市| 龙里县| 长白| 昌都县| 东乡族自治县| 巴林右旗| 南丰县| 津南区| 灵寿县| 新绛县| 尉犁县| 克拉玛依市| 扬州市| 齐齐哈尔市| 黄梅县| 东乌珠穆沁旗| 苍山县| 博客|