Snooper中的PQC使用说明

 

 

 

 

本手册中涉及的Snooper版本为0.0.6.7


   

PQC算法说明.... 3

一、简介:.... 3

二、辅助计算... 4

1.如何打开此功能?... 4

1.1打开snooper.exe,选择“Calculate 2... 4

1.2 fips 203为例,打开fips 203窗口。... 5

2.其他界面... 10

2.1 FIPS 204界面... 10

2.2 FIPS 205界面... 12

三、脚本计算... 12

 


 

PQC算法说明

一、简介:

PQC(后量子密码)是抵御量子计算攻击的公钥密码技术,其安全基础为量子计算机无法有效求解的数学困难问题(如格理论、多变量方程) 。该技术通过重构经典密码算法结构,防御量子计算机利用Shor算法破解传统公钥密码体系

 

PQC工具实现了fips-203, 204, 205三个功能,每个功能包括生成密钥对、读取生成的密钥对,对数据进行封装、解封或签名、验签。

 

Snooper 0.0.6.7版本中也加入了PQC全套的功能,下面对如何使用进行简单介绍。

二、辅助计算

1.如何打开此功能?

1.1打开snooper.exe,选择“Calculate 2

1.2 fips 203为例,打开fips 203窗口。

 

可以输入DZ值,也可以生成一个随机的DZ

 

点击“生成512”,则会生成EKDK

 

填入随机数,明文信息,则可进行封装操作,封装会产生封装结果和共享密钥。

点击解封按钮,则会对封装结果进行解封,并产生共享密钥,两个共享密钥应该是一致的。

 

 

2.其他界面

2.1 FIPS 204界面

2.2 FIPS 205界面

本界面也有多个页面,也可以上下拖动内容。

三、脚本计算

Snooper最大的优势在于脚本,拥有大量可靠的、实用的函数,下面以加密、解密为例,介绍一下Snooper脚本。

 

 

打开脚本

 

 

将下面的脚本填入新打开的窗口中

 

clear

 

d           = dup( 32, 11 )

z           = dup( 32, 22 )

 

m           = "this is my message"

// 填充到32字节

m           = pack00_len( $m, 20 )

 

x           = fips203_keygen_512( $d, $z )

if $x != 00

    ?

    pause

endif

 

ek          = fips203_get_ek()

dk          = fips203_get_dk()

 

c           = fips203_encaps_512( $m, $ek )

sharekey1   = fips203_get_en_sharekey()

 

m1          = fips203_decaps_512( $c, $dk )

sharekey2   = fips203_get_de_sharekey()

 

// 带检查的解密

m2          = fips203_decaps_512( $c, $dk, $ek )

 

if $m != $m1

    ?

    pause

endif

 

if $m != $m2

    ?

    pause

endif

 

if $sharekey1 != $sharekey2

    ?

    pause

endif

 

clear

 

seed    = random( 32 )

 

x       = fips204_keygen_44( $seed )

if $x != 00

    ?

    pause

endif

 

sk      = fips204_get_sk()

pk      = fips204_get_pk()

 

m       = random( 32 )

rnd     = random( 32 )

ctx     = random( 32 )

 

// 对明文操作

sig     = fips204_sign_44( $m, $sk, $ctx, $rnd, "" )

 

res     = fips204_verify_44( $m, $sig, $pk, $ctx, "" )

if $res != 00

    ?

    pause

endif

 

// hash操作

h       = fips204_prehash_sha256( $m, $ctx )

 

sig     = fips204_sign_hash_44( $h, $sk, $rnd, "" )

 

res     = fips204_verify_hash_44( $h, $sig, $pk, "" )

if $res != 00

    ?

    pause

endif

 

clear

 

sk_seed = random( 16 )

sk_prf  = random( 16 )

pk_seed = random( 16 )

 

rnd     = random( 16 )

m       = random( 32 )

ctx     = random( 32 )

 

// 生成密钥

x       = fips205_keygen_sha2__128f( $sk_seed, $sk_prf, $pk_seed )

if $x != 00

    ?

    pause

endif

 

sk      = fips205_get_sk()

pk      = fips205_get_pk()

 

// 对明文签名

sig     = fips205_sign_sha2__128f( $m, $sk, $ctx, $rnd )

 

res     = fips205_verify_sha2__128f( $m, $sig, $pk, $ctx )

if $res != 00

    ?

    pause

endif

 

// hash签名

h       = fips204_prehash_sha512( $m, $ctx )

 

sig     = fips205_sign_hash_sha2__128f( $h, $sk, $rnd )

 

res     = fips205_verify_hash_sha2__128f( $h, $sig, $pk )

if $res != 00

    ?

    pause

endif

 

 

 

 

F10逐行执行

 

或按F5全速执行。