POS设备硬件芯片在出厂时会设置一个设备ID和一个密钥。而在银联的POS交互协议中,有一个概念叫做“签到”,就是POS设备向服务器发起签到请求,然后让服务器返回三个工作密钥,分别用于加密POS传输给服务器的银行卡的三个信息。三个工作密钥是通过POS设备硬件芯片内的密钥(在服务器端也有)进行加密的。
既然POS设备已经有了一个固化的密钥,为什么还一定要一个签到来获取工作密钥呢?为什么不直接用固化的密钥进行数据加密传输给服务器呢?既然是密钥,肯定和安全性有关系,那么这种模式是如何加强了安全性的呢?
我们知道,POS设备与服务器(一般是金融机构)的交互数据都是加密传输的,而且这种加密的数据是使用可解密的方式加密,而不是使用非可逆加密(例如MD5就是非可逆加密)。
既然是可逆的,就存在破解的可能。那么如果一个黑客是如何破解一个加密方法,进而获得加密的密钥呢?当然,直接破解硬件设备底层是一种方法,但是这种方法一般需要直接操作硬件设备,甚至可能破坏硬件设备。
而另外一种方法,就是通过加密的数据和结果反推。举一个类比,就如同我们做二元一次方程一样。只要变量和完全不同的方程式足够多,我们就可以算出各个变量的值。所以,只要你的密钥不变,通过截获足够多的原始数据和加密后的密文就可以获得多个这样的方程式出来: f(卡信息,密钥) = 密文 。拥有的方程式越多,那么越容易破解出密钥这个变量和 f 这个算法函数(时间更短)。
所以,这种破解方法最终的关键点在于密钥不可变,只要不变,那么就自然可以积攒的“方程式”来破解。既然如此,那么破除这种破解的方法就是密钥定期/不定期更新。只要密钥一变,所有以前积攒的方程式都完全失效,破出来也没用(等你耗费很长时间破解了,这个工作密钥已经失效了)。
那么另外就有一个问题了,通过频繁的截取签到请求是否可以直接破解到硬件的密钥呢?答案是不行,为什么呢?还是和上边一样的分析方法。f(工作密钥,密钥) = 密文。这个时候真实的工作密钥和密钥都是变量。相当于整个函数对于拦截者,无从下手(除非暴力破解硬件设备);
可见,POS协议的“签到”,其实不仅仅是一个简单的“报到”,更重要的是加强了整个交互的安全性和可靠性。