現代密碼學求逆矩陣?【導讀】零知識證明是重要的密碼學技術之一,其中基于電路的通用零知識證明算法更是因為近年取得的長足發展和在區塊鍊項目中的應用而備受關注雙線性映射,也叫雙線性配對或雙線性對,是通用零知識證明算法的重要組成部分,也是衆多密碼體制,如聚合簽名、身份基加密、屬性基加密等的關鍵構件本文從零基礎開始,通過完整的模拟雙線性對的原理來實現一套在小有限域上的雙線性映射,幫助讀者加深對雙線性映射的理解,今天小編就來聊一聊關于現代密碼學求逆矩陣?接下來我們就一起去研究一下吧!
【導讀】
零知識證明是重要的密碼學技術之一,其中基于電路的通用零知識證明算法更是因為近年取得的長足發展和在區塊鍊項目中的應用而備受關注。雙線性映射,也叫雙線性配對或雙線性對,是通用零知識證明算法的重要組成部分,也是衆多密碼體制,如聚合簽名、身份基加密、屬性基加密等的關鍵構件。本文從零基礎開始,通過完整的模拟雙線性對的原理來實現一套在小有限域上的雙線性映射,幫助讀者加深對雙線性映射的理解。
“動手計算雙線性對”這個系列計劃有上中下三篇内容,本文是上篇,介紹後面文章需要的一些基礎知識。在中篇,我們将對一個名為curve101的曲線進行讨論,其有限域隻涉及101個元素,用于配對的橢圓曲線子群隻有17個點,不借助計算機也能方便的通過純手算完成整個過程,十分适合零基礎讀者入手。下篇則會實際計算并讨論雙線性對的實際例子,全部的中間計算過程我們都将列出,讀者可以按步驟重現整個計算流程。
在之後介紹零知識證明算法的系列文章中我們還會用到這個curve101進行演示,屆時讀者可以更加明白雙線性對的作用,而接下來我們就來一起從零基礎開始演算這個雙線性曲線。
【模運算相關知識-加減乘除】衆所周知,很多公鑰密碼體制都是建立在有限域上,特别是模素數的有限域(即模素數剩餘類域)。作為零基礎的系列,我們不去糾結數學概念“域”的嚴格定義,而是通過介紹帶模運算相關的内容,來真實的展現一個有限域。
帶模運算是在我們熟悉的加法和乘法的基礎上增加一步計算餘數的操作,例如,在以7為模數的系統中:
3 3 = 6,也就是(3 3)mod 7 = 6
3 6 = 2,也就是 (3 6)mod 7 = 2
4 × 2 = 1,也就是 (4 × 2)mod 7 = 1
所謂模素數就是說取模操作針對的是某個素數p,例如上述的7,或者curve101中的101。p是素數這個細節是關鍵的,在下文介紹帶模乘法的逆運算時你将會對這一點的必要性有更深的體會。
有了模加法,我們可以定義其逆運算是模減法,例如:
6 - 3 = 3,也就是(3 3)mod 7 = 6
2 - 6 = 3,也就是(2 - 6)mod 7 = 3
同理,有了模乘法,自然而然會想到去定義其逆運算“模除法”。但是加、減、乘我們可以直接正向計算得到,“模除法”就比較困難。例如為了求3/2等于幾必須思考哪個數乘以2等于3,而這個思考過程并不是特别直接。好在我們模7的例子中涉及到的元素并不多,因此通過窮舉就能找到答案:因為2×5=3,所以3/2等于5。
需要注意到3/2其實可以轉化為3× (1/2),而因為剛才我們計算過4×2=1,所以1/2的值我們其實是知道的(就是4)。因此3/2=5可以通3×4=5計算出來。這啟發我們可以枚舉全部形如1/n 的數得到一個“倒數表”,然後借助“倒數表”将除法轉化為乘法進行。
n |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
n-1 |
- |
1 |
4 |
5 |
2 |
3 |
6 |
模7逆元表
【模運算相關知識-剩餘類域】按習慣,我們一般不用1/n的寫法,也不用“倒數”這個稱呼。而是将1/n寫做 n-1,并将其稱為n的逆元。下文我們将遵從習慣,使用逆元這個叫法。顯而易見的是,在不同的模系統中,同一個數的逆元是不同的。比如模7系統中,3的逆元是5;而模11系統中3的逆元是4。因此除非有明确的語境和上下文,否則為了避免歧義,還要說明逆元是模幾的逆元才有意義,比如一個完整的說法是:3的模7逆元是5。
在模7的系統中,我們為每個元素都找到了逆元,在模17和模101的系統中也可以完成這樣的操作。那麼我們自然而然會想:是否在任何模的情況下都能為每個元素找到逆元呢?答案是否定的,例如在模8的系統中,找不到任何一個數乘以2等于1,也就是說在模8的系統中計算1/2這個“除法”是沒有意義的。實際上,隻有在模為素數的情況下才能為每個元素都找到逆元,也就是說在模素數的情況下我們才可以給任意兩個元素計算“除法”。在這樣的模素數系統中,任意兩個元素都能完成加減乘除四則運算,我們稱模7加法、模7乘法和集合{0,1,2,3,4,5,6}組成一個有限域:模7剩餘類域。
所謂“有限”的意思就是集合的元素是有限的,比如這裡的7個元素。雖然在本篇科普性質的文章對待數學概念都并非十分嚴格和謹慎,但是這裡仍然能夠揭示域的一些關鍵性質。比如我們發現僅利用集合中的元素就能夠計算四則運算。模7剩餘類域是這樣,有理數域、複數域等也都是這樣,意識到這一點就已經足夠完成後面文章的閱讀了。我們後面用Fp代指模p剩餘類域(p是素數),例如F7,F101等。
【模運算相關知識-開平方】讨論完了加減乘除四則運算,按照我們曾經學習有理數的思路,我們來考慮開平方運算。例如3×3mod7=2,所以3是2的“平方根”。如果某個非零元素是可以開平方根的,我們稱這樣的元素為模7的二次剩餘,否則就叫模7的二次非剩餘。這樣我們可以列出下面一張表:
n |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
二次剩餘情況 |
- |
1,6 |
3,4 |
二次非剩餘 |
2,5 |
二次非剩餘 |
二次非剩餘 |
可以注意到,二次剩餘的個數(1,2,4共3個)和二次非剩餘的個數(3,5,6共3個)是相等的(我們不對0做這樣的讨論),二次剩餘的逆元仍然是二次剩餘,二次非剩餘的逆元也仍然是二次非剩餘;而且我們還注意到,每個二次剩餘都有兩個根并且他們的和為0,這一點性質像極了正實數:正實數的平方根總有兩個,他們互為相反數。
如何判定一個數是否為二次剩餘和如何求二次剩餘都是有趣和實用的問題。比如在動手計算雙線性對(中)會談到的橢圓曲線中,已知x坐标和橢圓曲線方程求y的過程就需要考慮計算二次剩餘的問題。相關的方法一般會涉及到勒讓德符号等。而在我們的讨論的例子中因為元素的數量很少,我們一般采用窮舉的方法就能解決。
【模運算相關知識-域擴張】經過上面的演算,我們發現3在F7中沒有“平方根”,也就是不存在某個數其平方模7為3。類比複數域對實數域的擴展,我們假設3的一個平方根為j,即j*jmod7=3。現在我們把j加入到{0,1,2,3,4,5,6}集合中,然後嘗試再加入一些其他元素使得新的集合仍然構成一個域。
首先為了能夠計算加法和減法,至少還要加入j、1 j、2 j、3 j、4 j、5 j、6 j,為了能夠計算乘法我們至少還要加入j、2j、3j、4j、6j、6j,最終我們發現一個新的能夠計算四則運算的集合至少要有下面49個元素:
0 |
1 |
2 |
3 |
4 |
5 |
6 |
j |
1 j |
2 j |
3 j |
4 j |
5 j |
6 j |
2j |
1 2j |
2 2j |
3 2j |
4 2j |
5 2j |
6 2j |
3j |
1 3j |
2 2j |
3 3j |
4 3j |
5 3j |
6 2j |
4j |
1 4j |
2 4j |
3 4j |
4 4j |
5 4j |
6 4j |
5j |
1 5j |
2 5j |
3 5j |
4 5j |
5 5j |
6 5j |
6j |
1 6j |
2 6j |
3 6j |
4 6j |
5 6j |
6 6j |
例如6j j= 0;(3 j)(5 2j)= 4j; (4 4j)-1=6-6j
那麼僅用這49個元素能夠完成四則運算嗎?答案是肯定的,雖然本文不去嚴格證明這一點,但是可以簡單揭示一些其中的原因:
因為a和b是F7中的元素,因此a2-3b2 也是F7中的元素,因此可以判定a2-3b2 的逆元仍然是{0,1,2,3,4,5,6}中的元素。所以最後可以發現a bj的逆元是(a-bj)(a2-3b2)-1,它仍然落在49個元素之中。所以新的49個元素組成的集合不但包含{0,1,2,3,4,5,6,j},而且能夠計算四則運算。這個新的集合其實也是一個有限域,我們稱其為F7的二次擴域,記為F72,之所以是“二次”,我們可以這樣粗暴的理解:每個F72中的元素需要兩個F7的元素通過組合的方式來表示。
本篇介完了關于模運算和模p剩餘類域的一些基礎知識,下一篇“動手計算雙線性對(中)”,我們會介紹關于有限域上橢圓曲線的一些例子和知識,屆時會使用到本篇中的内容,敬請期待。
作者簡介
喬沛楊
趣鍊科技基礎平台部 區塊鍊底層密碼學小組
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!