我最近重写了ISO 14443-3防冲突循环,发现它实际上没有在标准中正确定义。
示例:该字段中的两张牌将进入防冲突循环:
card uid = AB CD EF GH IJ KL xx xx xx
(10字节/三倍大小的UID)
card uid = AB CD EF 88 GH IJ KL
(7字节/双倍尺寸UID)
他们都将进入防碰撞级联2级,其中:
将传输:UID CL2 = 88 GH IJ KL
- 因为88
是指示其UID较长的级联标记
将传输:UID CL2 = 88 GH IJ KL
- 作为其实际UID
=>没有彻底。
PCB将发送SELECT,两个卡都将响应SAK,其中bit2会发生冲突。
ISO / IEC 14443-3标准没有说明禁止uid [3]为0x88
,只禁止uid [0]为0x88
。
我是对的还是我错过了什么?我知道两张这样的牌同时出现在场上的概率非常低(1:2 ^ 56)。但是,这是不正确的(我工作的公司的总经理一定会来看看我们在钱包里用两张这样的牌做什么)。
答案 0 :(得分:5)
您显然没有参考最新版本的ISO / IEC 14443-3标准。这个问题存在于该标准的2001版本中,并在修订1(2005年)中通过添加以下条款进行了更正:
价值' 88'级联标签CT不得用于双倍大小的UID中的uid3。
我希望(虽然我没有检查)2011年版本的标准也是如此。
答案 1 :(得分:2)
p = 2 ^ -56发生的事情如何在无线通信标准中使用不正确?噪音发生破坏任何通信的可能性可能要高得多!
因此:实践标准具有实际意义。例如,查看哈希函数。显然,只要散列比散列数据短,所以没有散列没有冲突 - 但是将散列数据随机改变为具有相同散列的假数据的概率非常小,在实践中可以忽略。密码学依赖于攻击者,而不是纯粹的运气,在第一次尝试时找到正确的密钥;机械工程就是“哦,所有这些铁原子都是在一个整齐的金属网格中排列的,所以晶体断裂穿过支撑这座摩天大楼的整个钢梁的可能性非常小。”
2 ^ -56真的很小。