Java密碼學原型演算法實現——第三部分:雙線性對
背景介紹
技術部落格已經好久沒更新了。倒不是因為沒得寫,是因為實在是太忙了,而且研究也到了一個瓶頸期,需要大量閱讀文獻。
本來打算很長一段時間都不更新部落格了,甚至打算等我畢業工作後再更新一些有價值的部落格,但是最近在CSDN私信上和知乎上經常收到求救帖子,希望我能寫一個jPBC使用方法的部落格。甚至實驗室的碩士生們也在各種諮詢我相關的問題。於是,我打算一勞永逸,寫一篇有關jPBC使用的部落格。希望這個部落格出來後,能解決絕大多數人的問題吧…
本篇部落格期望解決的問題:
- 如何使用jPBC庫進行雙線性群初始化,包括:
- 質數階雙線性群(Prime-Order Bilinear Groups);
- 合數階雙線性群(Composite-Order Bilinear Groups);
- 如何使用jPBC庫執行雙線性群運算,包括:
- 指數群
Z 的加法和乘法; - 雙線性群
G 的乘法和指數冪; - 目標群
GT 的乘法和指數冪 - 雙線性群
G 對映到目標群GT 的對(Pairing)運算;
- 指數群
- 使用jPBC庫的一些注意事項。
本篇部落格不會涉及到的問題:
- 如何配置jPBC庫到Eclipse中;這方面的內容請參考我的另一篇部落格:jPBC 2.0.0配置與測試(補充版);
- 有關雙線性對的數學知識;這方面我在第二章會稍微介紹一下,但是不會詳談,因為內容太多了。
- 對偶雙線性群向量空間群(Dual Pairing Vector Space,DPVS);這個群在理論上被用於替代合數階雙線性群。其可以在保證同等安全性的條件下,使雙線性對運算時間較短,而代價是儲存開銷會變大。這個工具在2012年得到了廣泛的應用。但是這兩年普遍認為這個工具的進一步應用場景有限,而且表示並不直觀,還不如和合數階雙線性群好用。jPBC 2.0.0實際上提供了DPVS的實現,也是正確的。有興趣的朋友們可以自己研究一下,我在這裡就不詳述了。
- 如何使用jPBC 2.0.0的多線性對(Multilinear Maps)函式庫;這方面我自己一直沒找時間測試一下多線性對函式庫,實際上近期我也不太想測試這個庫,主要有兩方面的原因。
- 現在所構造出來的多線性對並非密碼學中的理想多線性對(Ideal Multilinear Maps),而是候選多線性對(Candidate Multilinear Maps),後者在使用上有很多的限制。
- jPBC 2.0.0實現的多線性對是[CLT-14]的方案,但這個方案已經被證明是不安全的了。
雙線性群簡介
質數階雙線性群(Prime-Order Bilinear Groups)
質數雙線性群可以由五元組
- 雙線性(Bilinearity):對於任意的
g∈G1 ,h∈G2 ,a,b∈Zp ,有e(ga,hb)=e(g,h)ab ; - 非退化性(Non-degeneracy):至少存在元素
g1∈G1,g2∈G2 ,滿足e(g1,g2)≠1 ; - 可計算性(Efficiency):對於任意的
u∈G1,v∈G2 ,存在一個與給定安全常數λ 相關的多項式時間演算法,可以高效地計算e(u,v) ;
現在的密碼學相關論文中,習慣將
合數階雙線性群(Composite-Order Bilinear Groups)
合數階雙線性群和質數階雙線性群很類似,區別是
與質數階雙線性群不同,合數階雙線性群中,
相關推薦
Java密碼學原型演算法實現——第三部分:雙線性對
背景介紹 技術部落格已經好久沒更新了。倒不是因為沒得寫,是因為實在是太忙了,而且研究也到了一個瓶頸期,需要大量閱讀文獻。 本來打算很長一段時間都不更新部落格了,甚至打算等我畢業工作後再更新一些有價值的部落格,但是最近在CSDN私信上和知乎上經常收到求救帖子,
Java密碼學原型演算法實現——第一部分:標準Hash演算法
題注 從部落格中看出來我是個比較鍾愛Java的應用密碼學研究者。雖然C在密碼學中有不可替代的優勢:速度快,但是,Java的可移植性使得開發人員可以很快地將程式碼移植到各個平臺,這比C實現要方便的多。尤其是Android平臺的出現,Java的應用也就越來越廣。因此,我本人在密
演算法導論 第三章:函式的增長 筆記(Θ記號、O記號、Ω記號、o記號、ω記號、漸近記號的性質、標準記號與常用函式)
Θ記號: 該記號圓圈中是個M。Θ記號漸近地給出一個函式的上界和下界。 對於一個給定的函式g(n),我們用Θ(g(n))來表示以下函式的集合: Θ(g(n))={f(n):存在正常量c1、c2和n0,使得對於所有n⩾n0,有0⩽c1g(n)⩽f(n)⩽c2g(n)}。 即若存在正常
24小時學通Qt之第三學時:Qt基礎
一、問題與答案 問:我的編譯器顯示按鈕的clicked()訊號與qApp的quit()槽連線這一行錯誤,為什麼? 答:要確保傳遞給connect()函式的物件引數為指標(地址)。如果不是,應該使用地址運算子&(將它加在物件名稱前面),以獲得該物件的記憶體地址。 二、測試 1、
50個常見的 Java 錯誤及避免方法(第三部分)
31.“Could Not Create Java Virtual Machine”當我們嘗試呼叫帶有錯誤引數的Java程式碼時,通常會產生此Java錯誤訊息(@ghacksnews):Error: Could not create the Java Virtual Mach
[譯] 利用 Python中的 Bokeh 實現資料視覺化,第三部分:製作一個完整的儀表盤
原文地址:Data Visualization with Bokeh in Python, Part III: Making a Complete Dashboard 原文作者:Will Koehrsen 譯文出自:掘金翻譯計劃 本文永久連結:github.com/xitu/g
Cocos2d-x簡單遊戲程式碼實現|第三部分:引導層
#ifndef __ShootPlane__InstroLayer__ #define __ShootPlane__InstroLayer__ #include <iostream> #include "commonHeader.h"
Java Stream函數語言程式設計第三篇:管道流結果處理
一、Java Stream管道資料處理操作 在本號之前寫過的文章中,曾經給大家介紹過 Java Stream管道流是用於簡化集合類元素處理的java API。在使用的過程中分為三個階段。在開始本文之前,我覺得仍然需要給一些新朋友介紹一下這三個階段,如圖: 第一階段(圖中藍色):將集合、陣列、或行文字檔案
《Java從入門到失業》第三章:基礎語法及基本程式結構(四):基本資料型別(字元編碼和char型)
3.6.4字元編碼 咦?怎麼好像有東西亂入了?不是講基本資料型別麼?哈哈,因為還剩下最後一個char型了,因為char型會牽涉到Unicode編碼相關,因此我決定先科普一下字符集編碼。 &
Java併發必知必會第三彈:用積木講解ABA原理
# Java併發必知必會第三彈:用積木講解ABA原理 ![封面圖](http://cdn.jayh.club/blog/20200825/f0IhlK4RmutQ.png?imageslim) 可落地的 Spring Cloud專案:[PassJava](https://github.com/Jackso
《Java從入門到失業》第三章:基礎語法及基本程式結構(五):基本算數運算子(1)
3.7運算子 數學運算是計算機的基本用途之一,Java提供了非常豐富的運算子來支援。我們根據運算的特點和性質,把運算子劃分為幾組:基本算數運算子、自增自減運算子、關係運算符、位運算子、邏輯運算子、賦值運算子、其他運算子。下面分別介紹。 3.7.1基本算數運算子 &nb
《Java從入門到失業》第三章:基礎語法及基本程式結構(3.7):運算子(小數二進位制、科學記數法、IEEE754標準)
3.7.1.4浮點數運算 要討論浮點數運算,牽涉到的知識比較多,下面一點一點的來逐步展開。為了便於同時討論十進位制和二進位制數,我們做一個約定,我們把十進位制數簡寫為N10,把二進位制數簡寫為N2。 3.7.1.4.1小數的二進位制 &
《Java從入門到失業》第三章:基礎語法及基本程式結構(3.8):流程控制(選擇語句、if-else語句、switch語句)
3.8流程控制 到此為止,我們已經基本瞭解了Java的基礎語法,會定義不同型別的變數,會命名,會給變數賦值和運算等。接下來,我們需要學會流程控制方面的知識。 3.8.1選擇語句 3.8.1.1if-else語句
《Java從入門到失業》第三章:基礎語法及基本程式結構(3.8):流程控制(迴圈語句、while語句、for語句)
3.8.2迴圈語句 3.8.2.1while語句 最近這些年買彩票只能去投注站買,早些年,筆者經常是在網上買。在網上買有個功能:追號。就是假如你想一直買同一組號碼,直到中大獎為止。你可以設定一個條件,比如中了頭獎就不繼續買了,如果沒有中頭獎,下一期繼續買同
《Java從入門到失業》第三章:基礎語法及基本程式結構(3.9):陣列(陣列基本使用、陣列的迴圈、陣列拷貝、陣列排序、多維陣列)
3.9陣列 3.9.1陣列基本使用 陣列,英文叫Array,是一種資料結構,是用來存放同一資料型別數值的集合。例如存放30個int型數值、存放100個double型數值等等。 我們知道使用一個變數,需要先宣告一個變數,例如:int a;
Kaggle word2vec NLP 教程 第三部分:詞向量的更多樂趣
第三部分:詞向量的更多樂趣 程式碼 第三部分的程式碼在這裡。 單詞的數值表示 現在我們有了訓練好的模型,對單詞有一些語義理解,我們應該如何使用它? 如果你看它的背後,第 2 部分訓練的 Word2Vec 模型由詞彙表中每個單詞的特徵向量組成,儲存在一個名為sy
python全棧開發中級班全程筆記(第二模組) 第三部分 :遞迴
python全棧開發筆記第二模組 第三部分 :遞迴 一、遞迴定義及使用 定義:什麼叫遞迴?遞迴就是在函式的執行中呼叫自己 下面程式碼舉例說明: 例: def recursion(n): #設定計數 print(n) #為了能驗證呼叫自己多少次,列
設計資料密集型應用第三部分:派生資料
《Designing Data-Intensive Applications》的第一部分,基於單點(single node)介紹了資料系統的基礎理論與知識;在第二部分,則是將視野擴充套件到了分散式資料系統,主要是Partition和Repliacation。在第三部分,則聚焦於派生資料系統。 int
第三部分:初步認識Twisted
第三部分:開始認識Twisted 可以從這裡從頭開始閱讀這個系列。 用twisted的方式實現前面的內容 最終我們將使用twisted的方式來重新實現我們前面的非同步模式客戶端。不過,首先我們先稍微寫點簡單的twisted程式來認識一下twisted。 最最簡單的twisted程式就是
【JavaFx教程】第三部分:與使用者的互動
第3部分的主題: 在表中反應選擇的改變(TableView中)。 增加增加,編輯和刪除按鈕的功能。 建立自定義彈出對話方塊編輯人員。 驗證使用者輸入。 響應表的選擇 顯然,我們還沒有使用應用程式的右邊。想法是當用戶選擇表中的人員時,在右邊顯示人員的詳情。 首先