PBC Library Manual(PBC庫手冊)翻譯(一)

PBC Library Manual 0.5.14

作者Ben Lynn

BufferPools譯


目錄

前言

1.安裝PBC

1.1.簡易Makefile

1.2.快速啓動(Quick Start)

1.3.基本知識


前言

PBC庫是一個免費可移植的C語言庫,可以允許基於pairing的密碼系統的快速原型化。提供了一個雙線性對循環羣的抽象接口,使程序員不需要知道數學的細節便可以使用。

PBC庫是建立在GMP庫基礎之上的,並且PBC API收GMP API影響比較大。因此本手冊試圖模仿GMP手冊的那種感覺和視覺。

PBC庫主頁:https://crypto.stanford.edu/pbc/

GMP庫主頁:https://gmplib.org/

1.安裝PBC

PBC庫依賴GMP庫(https://gmplib.org/)。

構建系統已經經過測試,在Linux和Mac OS X上可以使用fink安裝。

$ ./configure
$ make
$ make install

在Windows上,configure命令需要添加兩個選項:

$ ./configure -disable-static -enable-shared

默認情況下庫安裝在/usr/local/lib中。在一些系統上,可能不在庫路徑中。解決此問題的一種方法是編輯/etc/ld.so.conf然後運行ldconfig。

1.1.簡易Makefile

爲了速度和簡單性,在開發時使用simple.make。自然而然,這樣做缺少便攜性(portable)。

$ make -f simple.make

PBC使用了一些GNU的C拓展,例如嵌套函數(nested function)。

1.2.快速啓動(Quick Start)

我們會使用如下符號。爲了我們的目的,pairing是一個從兩個循環羣G1、G2到第三個羣GT的雙線性對映射,其中每個羣都是素數r階的。

運行 pbc/pbc 並且輸入:

g := rnd(G1);
g;

第一行用於生成一個羣G1中的隨機元素,而第二行用於打印出g的值。(語法受到了bc的影響,bc是一種任意精度的計算器。)然後輸入:

h := rnd(G2);
h;

將G2中的一個隨機元素賦值給h。實際上,pbc使用的默認pairing是對稱的,因此G1和G2實際上是相同的羣,但是通常情況下G1和G2是不同的。要計算應用於g和h的pairing,輸入:

pairing(g, h);

g和h都是 r階的。接下來生成1-r的兩個隨機數:

a := rnd(Zr);
b := rnd(Zr);

根據雙線性,這兩條線輸出的結果應該是相同的:

pairing(g^a, h^b);
pairing(g, h)^(a*b);

這個程序還有其他的功能,但是這裏展示的命令足以快速和交互地實驗許多使用實數的基於pairing的密碼系統。

1.3.基本知識

使用PBC庫的程序應該包含pbc.h:

#include <pbc.h>

並且與PBC庫和GMP庫進行連接,例如:

$ gcc program.c -L. -lpbc -lgmp

pbc.h文件已經包含了gmp.h。

PBC在一些方面遵循GMP:

  • 輸出參數通常位於輸入參數之前。
  • 同一個變量可以在一次調用中用作輸入和輸出。
  • 在使用變量之前,變量必須已經被精確初始化。當不再需要這個變量時必須釋放它。爲了提高效率,應該避免不必要的初始化和釋放。(這個地方有點沒翻譯清楚,不理解該如何操作)
  • 以_t結尾的PBC變量的作用在函數調用時與GMP變量相同:有效的作爲調用引用(effectively as call-by references)(這裏翻譯不是很通順,意思大概是相當於c中的引用參數)。換句話說,正如在GMP中,如果一個函數修改了一個輸入變量,當把控制權返回給調用者時,該變量也會被修改。
  • 與GMP類似,變量在需要時自動分配內存。默認情況下,會調用malloc()和friends(這裏的friends不知道該如何翻譯),但是有時也可以更改。
  • PBC函數大多是可重入的(可重入函數)。
  • 因爲PBC庫是檢錄組GMP庫之上的,所以可以使用GMP的數據類型。PBC類型類似於GMP類型。下面的例子改編自GMP手冊中的一個例子,並展示瞭如何聲明PBC數據類型element_t。
element_t sum;
struct foo {element_t x, y;};
element_t ver[20];

GMP的mpz_t類型用於整數,mpq_t用於有理數等等。相比之下,PBC對於不用的代數結構(例如橢圓曲線羣、多項式環、有限域)中的元素使用element_t數據類型。函數假定他們的輸入來自適當的代數結構。

PBC數據類型和函數可以分爲一下幾類。僅前兩個就可以滿足一系列應用程序。

  • element_t:代數結構中的元素。
  • pairing_t:元素所屬的pairing;可以從PBC附帶的param子目錄中的示例pairing參數初始化。
  • pbc_param_t:用於生成pairing參數。
  • pbc_cm_t:用CM方法構造麴線的參數;有時在pbc_param_t中需要。
  • field_t:代數結構:羣、環、域;在pairing_t內部使用。
  • 一些雜項函數,例如控制如何生成隨機位的函數。

操作給定數據類型的函數通常具有相同的前綴,例如,與element_t有關的對象以element_開頭。

 

注:刪除線部分是翻譯不通順或者可能有錯誤的地方。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章