日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【密码专栏】动手计算双线性对(上)

發(fā)布時間:2023/12/31 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【密码专栏】动手计算双线性对(上) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【導(dǎo)讀】

零知識證明是重要的密碼學(xué)技術(shù)之一,其中基于電路的通用零知識證明算法更是因為近年取得的長足發(fā)展和在區(qū)塊鏈項目中的應(yīng)用而備受關(guān)注。雙線性映射,也叫雙線性配對或雙線性對,是通用零知識證明算法的重要組成部分,也是眾多密碼體制,如聚合簽名、身份基加密、屬性基加密等的關(guān)鍵構(gòu)件。本文從零基礎(chǔ)開始,通過完整的模擬雙線性對的原理來實現(xiàn)一套在小有限域上的雙線性映射,幫助讀者加深對雙線性映射的理解。

“動手計算雙線性對”這個系列計劃有上中下三篇內(nèi)容,本文是上篇,介紹后面文章需要的一些基礎(chǔ)知識。在中篇,我們將對一個名為curve101的曲線進(jìn)行討論,其有限域只涉及101個元素,用于配對的橢圓曲線子群只有17個點,不借助計算機(jī)也能方便的通過純手算完成整個過程,十分適合零基礎(chǔ)讀者入手。下篇則會實際計算并討論雙線性對的實際例子,全部的中間計算過程我們都將列出,讀者可以按步驟重現(xiàn)整個計算流程。

在之后介紹零知識證明算法的系列文章中我們還會用到這個curve101進(jìn)行演示,屆時讀者可以更加明白雙線性對的作用,而接下來我們就來一起從零基礎(chǔ)開始演算這個雙線性曲線。

【模運算相關(guān)知識-加減乘除】
眾所周知,很多公鑰密碼體制都是建立在有限域上,特別是模素數(shù)的有限域(即模素數(shù)剩余類域)。作為零基礎(chǔ)的系列,我們不去糾結(jié)數(shù)學(xué)概念“域”的嚴(yán)格定義,而是通過介紹帶模運算相關(guān)的內(nèi)容,來真實的展現(xiàn)一個有限域。

帶模運算是在我們熟悉的加法和乘法的基礎(chǔ)上增加一步計算余數(shù)的操作,例如,在以7為模數(shù)的系統(tǒng)中:

3 + 3 = 6,也就是(3 + 3)mod 7 = 6

3 + 6 = 2,也就是 (3 + 6)mod 7 = 2

4 × 2 = 1,也就是 (4 × 2)mod 7 = 1

所謂模素數(shù)就是說取模操作針對的是某個素數(shù)p,例如上述的7,或者curve101中的101。p是素數(shù)這個細(xì)節(jié)是關(guān)鍵的,在下文介紹帶模乘法的逆運算時你將會對這一點的必要性有更深的體會。

有了模加法,我們可以定義其逆運算是模減法,例如:

6 - 3 = 3,也就是(3 + 3)mod 7 = 6

2 - 6 = 3,也就是(2 - 6)mod 7 = 3

同理,有了模乘法,自然而然會想到去定義其逆運算“模除法”。但是加、減、乘我們可以直接正向計算得到,“模除法”就比較困難。例如為了求3/2等于幾必須思考哪個數(shù)乘以2等于3,而這個思考過程并不是特別直接。好在我們模7的例子中涉及到的元素并不多,因此通過窮舉就能找到答案:因為2×5=3,所以3/2等于5。

需要注意到3/2其實可以轉(zhuǎn)化為3× (1/2),而因為剛才我們計算過4×2=1,所以1/2的值我們其實是知道的(就是4)。因此3/2=5可以通3×4=5計算出來。這啟發(fā)我們可以枚舉全部形如1/n 的數(shù)得到一個“倒數(shù)表”,然后借助“倒數(shù)表”將除法轉(zhuǎn)化為乘法進(jìn)行。
模7逆元表

【模運算相關(guān)知識-剩余類域】
按習(xí)慣,我們一般不用1/n的寫法,也不用“倒數(shù)”這個稱呼。而是將1/n寫做 n-1,并將其稱為n的逆元。下文我們將遵從習(xí)慣,使用逆元這個叫法。顯而易見的是,在不同的模系統(tǒng)中,同一個數(shù)的逆元是不同的。比如模7系統(tǒng)中,3的逆元是5;而模11系統(tǒng)中3的逆元是4。因此除非有明確的語境和上下文,否則為了避免歧義,還要說明逆元是模幾的逆元才有意義,比如一個完整的說法是:3的模7逆元是5。

在模7的系統(tǒng)中,我們?yōu)槊總€元素都找到了逆元,在模17和模101的系統(tǒng)中也可以完成這樣的操作。那么我們自然而然會想:是否在任何模的情況下都能為每個元素找到逆元呢?答案是否定的,例如在模8的系統(tǒng)中,找不到任何一個數(shù)乘以2等于1,也就是說在模8的系統(tǒng)中計算1/2這個“除法”是沒有意義的。實際上,只有在模為素數(shù)的情況下才能為每個元素都找到逆元,也就是說在模素數(shù)的情況下我們才可以給任意兩個元素計算“除法”。在這樣的模素數(shù)系統(tǒng)中,任意兩個元素都能完成加減乘除四則運算,我們稱模7加法、模7乘法和集合{0,1,2,3,4,5,6}組成一個有限域:模7剩余類域。

所謂“有限”的意思就是集合的元素是有限的,比如這里的7個元素。雖然在本篇科普性質(zhì)的文章對待數(shù)學(xué)概念都并非十分嚴(yán)格和謹(jǐn)慎,但是這里仍然能夠揭示域的一些關(guān)鍵性質(zhì)。比如我們發(fā)現(xiàn)僅利用集合中的元素就能夠計算四則運算。模7剩余類域是這樣,有理數(shù)域、復(fù)數(shù)域等也都是這樣,意識到這一點就已經(jīng)足夠完成后面文章的閱讀了。我們后面用Fp代指模p剩余類域(p是素數(shù)),例如F7,F101等。

【模運算相關(guān)知識-開平方】
討論完了加減乘除四則運算,按照我們曾經(jīng)學(xué)習(xí)有理數(shù)的思路,我們來考慮開平方運算。例如3×3mod7=2,所以3是2的“平方根”。如果某個非零元素是可以開平方根的,我們稱這樣的元素為模7的二次剩余,否則就叫模7的二次非剩余。這樣我們可以列出下面一張表:

可以注意到,二次剩余的個數(shù)(1,2,4共3個)和二次非剩余的個數(shù)(3,5,6共3個)是相等的(我們不對0做這樣的討論),二次剩余的逆元仍然是二次剩余,二次非剩余的逆元也仍然是二次非剩余;而且我們還注意到,每個二次剩余都有兩個根并且他們的和為0,這一點性質(zhì)像極了正實數(shù):正實數(shù)的平方根總有兩個,他們互為相反數(shù)。

如何判定一個數(shù)是否為二次剩余和如何求二次剩余都是有趣和實用的問題。比如在動手計算雙線性對(中)會談到的橢圓曲線中,已知x坐標(biāo)和橢圓曲線方程求y的過程就需要考慮計算二次剩余的問題。相關(guān)的方法一般會涉及到勒讓德符號等。而在我們的討論的例子中因為元素的數(shù)量很少,我們一般采用窮舉的方法就能解決。

【模運算相關(guān)知識-域擴(kuò)張】
經(jīng)過上面的演算,我們發(fā)現(xiàn)3在F7中沒有“平方根”,也就是不存在某個數(shù)其平方模7為3。類比復(fù)數(shù)域?qū)崝?shù)域的擴(kuò)展,我們假設(shè)3的一個平方根為j,即j*jmod7=3。現(xiàn)在我們把j加入到{0,1,2,3,4,5,6}集合中,然后嘗試再加入一些其他元素使得新的集合仍然構(gòu)成一個域。

首先為了能夠計算加法和減法,至少還要加入j、1+j、2+j、3+j、4+j、5+j、6+j,為了能夠計算乘法我們至少還要加入j、2j、3j、4j、6j、6j,最終我們發(fā)現(xiàn)一個新的能夠計算四則運算的集合至少要有下面49個元素:

例如6j+j= 0;(3+j)(5+2j)= 4j; (4+4j)-1=6-6j

那么僅用這49個元素能夠完成四則運算嗎?答案是肯定的,雖然本文不去嚴(yán)格證明這一點,但是可以簡單揭示一些其中的原因:

對于加法和減法,我們很容易驗證任意兩個元素的和、差都在還在集合中;

對于乘法,因為j×j=3這條規(guī)則,簡單驗證后我們就能發(fā)現(xiàn)任何兩個元素的積還是在集合中;唯一需要仔細(xì)考慮一下的是除法;

對于除法,我們總可以通過如下方式計算a+bj的逆元(a和b不同時為0):

因為a和b是F7中的元素,因此a2-3b2 也是F7中的元素,因此可以判定a2-3b2 的逆元仍然是{0,1,2,3,4,5,6}中的元素。所以最后可以發(fā)現(xiàn)a+bj的逆元是(a-bj)(a2-3b2)-1,它仍然落在49個元素之中。所以新的49個元素組成的集合不但包含{0,1,2,3,4,5,6,j},而且能夠計算四則運算。這個新的集合其實也是一個有限域,我們稱其為F7的二次擴(kuò)域,記為F72,之所以是“二次”,我們可以這樣粗暴的理解:每個F72中的元素需要兩個F7的元素通過組合的方式來表示。

本篇介完了關(guān)于模運算和模p剩余類域的一些基礎(chǔ)知識,下一篇“動手計算雙線性對(中)”,我們會介紹關(guān)于有限域上橢圓曲線的一些例子和知識,屆時會使用到本篇中的內(nèi)容,敬請期待。

作者簡介
喬沛楊
趣鏈科技基礎(chǔ)平臺部 區(qū)塊鏈底層密碼學(xué)小組

總結(jié)

以上是生活随笔為你收集整理的【密码专栏】动手计算双线性对(上)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。