我目前正在编写一个支付系统,以接受从启用NFC的智能手机(BlackBerry 9900)到Windows (C#.NET)的支付详细信息。
我目前有两个与安全有关的问题:
请注意,我根本没有密码学的经验。我的目标是实现一个在.NET 3.0和BlackBerry SDK7.0中都有现成库的解决方案。
发布于 2012-02-11 13:33:45
这里的近场通信没有什么特别之处--就像任何不安全的传输介质一样,它们可以被丢弃(外部天线的距离可达几米)。
由于距离限制,如果您(人工操作员)确信您的设备正在与正确的阅读器通信,则无法对中间人进行攻击,但也存在中继攻击(您的黑莓与读取器通信,后者将数据转发给另一个与真正的读取器通信的设备),这也可能包括重放问题。
我建议不要构建新的协议(特别是如果您对密码学还不熟悉),而是重用现有的、众所周知的协议。在这种情况下,通常的TLS (传输层安全)协议似乎非常合适,如果您可以为您的“服务器”提供保密的私钥,并且其相应的公钥可以由某个证书代理机构认证,其密钥(或某个链的根密钥)将为“客户”所知。
在通常的SSL/TLS操作方式中,客户端和服务器协商一个共享秘密,然后从该秘密派生会话密钥。
(我认为让黑莓( Blackberry )成为客户端,让windows机器成为服务器会更容易一些,但它的工作方式也会相反。)
我对Blackberry编程(也不知道.NET)一无所知,但我认为两者都可以使用SSL/TLS库。
请注意,虽然这避免了重放攻击(键是根据每个会话单独创建的,以后不会起作用),但这并不能真正帮助防止中继攻击--所以请确保只向您信任的卖家发送您的支付详细信息。
https://crypto.stackexchange.com/questions/1838
复制相似问题