Archive for category Cryptography

Shabal Cryptographic Hash Algorithm之前世今生(1)

今天看了罗岚师姐的一篇关于SHA3算法第二轮点评的文章,其中对于Shabal赞赏有佳。Check了一下NIST他们自己的第二阶段总结报告,看来对于Shabal的总评价都是“大家手笔、设计优雅、创意出众、教科书般的可证明安全”。正好最近在搞一个轻量级one-way function的设计,就花些时间看看吧。

值得一提的是,Shabal提交的设计文档那就是与众不同,沉甸甸的300多页啊~~~ 不愧是背后有法国众多财团支持的设计。研究这玩意儿就是这样,只有让researcher们吃饱了喝足了他们才能干出好的活儿来。

书归正传。这份设计文档写的非常不错,第一章基本可以作为hash设计的一个survey了,非常适合我这种没有怎么搞过hash设计的人学习、思考。这里总结如下:他们首先提了一个通用的“iterative hash function construction”。这个提纲挈领的图(列在下面,源自Shabal提交的设计文档,下同)做了一个非常到位的总结,基本上概括了现在所有已知hash function的设计方法。剩下的工作不外乎是如何把R、F、T这三个函数优化优化,提高hash的吞吐量而已。

image

 

比如说,很有名的Damgard Merkle结构(下图)其实就是这个通用框架的简化版(但不安全,已经不能用了)。后续有一些工作就是improve DM框架的,思路不外乎三个输入、中间环节和输出。对于输入,我们不能全部padding “0”了, 那样太不安全;对于中间环节,加个counter计数(像block cipher的counter mode),再有就是最后几轮迭代用不同的函数来产生“Discontinuity”的性质;对于输出,能truncated的就一定要truncated。

image

顺便搜了一下才发现Merkel有多牛。我们经常使用他发明的Merkel Tree, Merkel’s Puzzles, Damgard Merkel Construciton, 但搞了半天这哥们儿竟然是做纳米材料的或者说现在转行做纳米材料了~~~。还有关于Merkel的一个有趣的小故事(引自):

关于背包算法,Tanenbaum的《Computer Networks》(4th)中讲述了一个有趣的故事:背包算法设计这Merkle曾悬赏100美金破解该算法,RSA组合中的S,即Shamir迅速破解算法并领走奖金。Merkle于是增强了算法,再次悬赏破解,奖金加到1000美金。RSA组合中的R,即Rivest又迅速破解领走奖金。此后Merkle就没再悬赏了,因此RSA组合中的另外一个人A,即Adleman也就没能拿到预期的10000美金了。从这个故事可以看出RSA这个信息安全领域的黄金组合的确超级牛叉!

除了DM结构,欧米会上有几个老外提出来了“密码学海绵函数(Cryptographic Sponges)”的概念~~~ 说这个函数有两个过程“吸收”和“挤出”跟海绵似的。本质上所有hash function都是有这两个阶段的,前面若干轮都是通过自反馈提高Linear Span,最后几轮才输出。这些老外还真是会包装自己、炒作概念啊!!

Cryptographic Sponges 结构如下图。其实我们不难看出它实际上也被包括在那个general construction里面,而且也其实是DM结构的一种变形。他用T去模仿压缩函数。实际应用中可用作hash校验、MAC、流密码。然后他们证明了一下“Indifferentiability”。 具体的可以看看他们的网页,图和slides做的不错:http://sponge.noekeon.org/。 SHA3征集的算法里面,我大致浏览了一下,也有4、5个采用了这种设计思想。image

分享到

Tags:

2.9米,密码学难以逾越的天堑!浅谈Paypass的安全模块

偷得浮生半日闲,今天下午查了查PayPass技术以及在之上可以做的研究方向和可行性。就懒得写报告了,简单写个博文吧~~~

PayPass 是MasterCard(万事达卡)国际组织2003 年推出的一种无线支付技术,从2004 年开始在全球开始推广。持卡人只要将银行卡在专用非接触式读卡器前挥动,即可完成传统形式的银行交易,而不用像以前一样,需要将卡片从读卡器插槽中划过。

Paypass 卡与传统银行卡的特点对比如下

image

 

以下摘自新闻:恩智浦SmartMX IC获得MasterCard PayPass认证

恩智浦半导体(NXP Semiconductors,由飞利浦创建的独立半导体公司)日前宣布其非接触银行芯片——SmartMX P5CD012应用到奥地利卡公司的银行卡中(半天线尺寸),该芯片具有行业标竿385毫秒的交易速度,并已得到MasterCard(以下简称万事达卡)PayPass认证。这项解决方案将确保发卡商和银行机构为消费者提供快速、安全的支付卡并让消费者享受最佳的非接触支付体验——取代现金并减少排队等待。为实现更短的支付处理时间,恩智浦采用了最新的双界面SmartMX P5CD016产品线,其处理非接触交易的时间比市场同类产品快35%

 

接下来查了一下这款看似技术处于行业内领先地位的芯片family,它的全名叫做:

P5Cx012/02x/40/73/80/144 family – Secure dual interface and contact PKI smart card controller 

以下慢慢解释他为什么叫这个NB的名字

-    支持两种接口contact和contactless,前者是用的ISO/IEC 7816标准 后者是扩展性非常强的ISO/IEC 14443 A的标准,顾名思义 Dual Interface~~

-    更为NB的是这个芯片有超强的密码学功能,怪不得叫做   Secure XXXXXXX PKI XXXXXXXXXX智能卡控制器,这些密码学功能是通过三个协处理器做到的:

-    第一个叫做Triple-DES coprocessor,用来做3DES加解密的,速度号称在40 us之内,密钥长度应该是64位

-    第二个叫做AES coprocessor,用来做AES的,supports key lengths of 128-bit, 192-bit, and
256-bit with performance levels comparable to DES

-    第三个叫做FameXE coprocessor,这个不得了,是用来做公钥加密计算的,支持2048-bit RSA 和192-bit ECC。至于性能,手册这样描述到“An ECC GF(2n) based signature, using a 163-bit key can be executed in less than 30 ms”

-     还有一些optional的支持的东西,罗列在这里,SHA1、SHA2都在其中

– AES encryption and decryption using the AES coprocessor
– DES and Triple-DES encryption and decryption using the DES coprocessor
– RSA encryption and decryption, signature generation and verification for
straightforward and CRT keys up to 5024 bits
– RSA key generation
– ECCoverGF(p)signaturegenerationandverification(ECDSA)andDiffie-Hellman
key exchange for keys up to 544 bits
– ECC over GF(p) key generation
– ECC over GF(2n) signature generation and verification (ECDSA) and
Diffie-Hellman key exchange for keys up to 571 bits
– ECC over GF(2n) key generation
– SHA-1, SHA-224 and SHA-256 hash algorithm
– Pseudo-Random Number Generator (PRNG)

芯片白皮书可见:http://www.nxp.com/#/pip/pip=[pip=P5CX012_02X_40_73_80_144_FAM_SDS_3]|pp=[t=pip,i=P5CX012_02X_40_73_80_144_FAM_SDS_3]

很好奇这款芯片的功耗问题,手册上只是简单交代了以下,也没交代清楚这个Class ABCDEF什么的具体的意义。猜测可能C是最弱的一类,支持的功能较少,但是功耗低,可以做passive的卡。

image

众所周知,现在EPC tag (ISO18000-6C) 很火爆,主要是用在物流上,有大的reading range,但是安全简直做的一塌糊涂。 于是这里我们很自然的就想到一个问题,为什么看似差不多的 SmartMX (ISO14333-A) 和EPC tag (ISO18000-6C) 在密码学功能上会有如此大的差异呢~~~  这里我们借用 Martin Feldhofer在rfidsec07上讲的《Strong Crypto for Tiny RFID Tags — Challenges and Design Issues》中的一页slide来解释这个问题。

image

说到底还是个功耗和价格问题。价格决定了芯片的面积,也就直接的决定了可以implement在芯片上的密码学模块的多少,这是显而易见的。另外一个不太显而易见的问题是,reading range决定了tag可用能量的大小(15uA 和 10mA 相差了几乎1000倍)。能量不够,当然也不能跑太多的function。但是这个1000倍的差距是怎么形成的呢?原来电磁场在空间上的扩散会造成其强度的衰减(想像一个点慢慢稀疏成一个球),可以用“Inverse-square_law”描述场强度的衰减, I_1/I_2 = (r_2/r_1)^2. 假设ISO14333-A tag在10厘米处读取,ISO18000-6C tag 在3米处读取,那么1米处的场强度是10厘米场强度的1/900倍~~~ 这就基本说明了为什么上图中的电流相差了近1000倍~~~。

真是想不到,短短2.9米的物理距离,会造成两种芯片在安全性上完全不同的表现!会造成密码学难以逾越的天堑! Amazing!

 

总结上文,看来这款芯片并非浪得虚名,SmartMX NB! Paypass 用了些很好很强大的密码学积木来搭建自己的安全,料想安全性应该不会很差,就是不知道它的安全协议设计的如何,更多信息有待进一步研究。

分享到

Tags:

用NTL在扩域上做运算

NTL (http://www.shoup.net/ntl/)是 Victor Shoup 写的一个高效率的基于C++的大数高精度运算库,
可惜的是已经停止开发。这个库对密码学所需要的数论运算、有限域运算有很好的支持。
这个库很不错 美中不足的是手册太简要了,尤其是例子比较缺乏。
另外对每个接口函数的描述也不够清晰(毕竟不是搞软件的人啊~~呵呵)。
下面记录下在implement自己论文的scheme同时,学习NTL(有限域部分)的一点体会。 
查了一些资料(谢谢数缘社区的朋友们 )
 
#include <fstream>
#include <NTL/GF2E.h>
#include <NTL/GF2EX.h>

#pragma comment(lib,"NTLLIB.lib") //使用NTL静态库

NTL_CLIENT

int main()
{

	/*例子1:GF2X上的多项式加法
	GF2X a = GF2X(10, 1);
	SetCoeff(a, 3, 1);
	GF2X b, c;
	random(b,10);
	c = a + b;
	cout << "a=" << a << "\nb=" << b << "\nc=" << c << "\n";*/

	//例子2:GF(2^8)上面的加法
	GF2X f;
	//BuildIrred(p, 4);定义一个不可约多项式 也可以让系统帮你随一个
	SetCoeff(f,8,1);
	SetCoeff(f,7,1);
	SetCoeff(f,6,1);
	SetCoeff(f,3,1);
	SetCoeff(f,2,1);
	SetCoeff(f,1,1);
	SetCoeff(f,0,1);
	GF2E::init(f);
	GF2EX A, B;
	//random(A, 2);
	//random(B, 2); 可以random 
	//也可以从文件里面读入 读入格式是
	//[[] [1]]
	//[[1 1 0 1 1 1 1]]
	//存在input.txt中

	ifstream fin("input.txt");
    	fin >> A;
    	fin >> B;
	cout << "a=" << A << "\nb=" << B << "\nc=" << A+B << "\n";
}
分享到

Tags:

Lightweight Crypto

image

image

分享到