我有一个(大学)项目,我基本上使用Android设备从NFC标签中写入和读取文本,以便在卡片中存储其余的余额(例如,可以在自助餐厅使用)
现在,我正在使用NTAG213执行以下代码:
ndef.connect();
NdefRecord mimeRecord = NdefRecord.createMime("text/plain", messageEncrypted.getBytes(Charset.forName("US-ASCII")));
ndef.writeNdefMessage(new NdefMessage(mimeRecord));
ndef.close();
正如您所注意到的,我在使用应用程序级加密对消息(messageEncrypted
)进行加密之前将其写入标记(AES-256使用&com; scottyab加密:aescrypt: 0.0.1'库 - 一个非常大的密码密钥,它也使用标签UID作为其一部分。)
到目前为止一直很好 - 只有我能理解标签上的数据。
在我的研究中,我发现在安全性方面,Ultralight C> NTAG213。
问题1)使用应用程序级加密时,为什么(是吗?)MIFARE Ultralight C比NTAG213更安全吗?
问题2)我非常确定我可以使用AES加密来保证安全性,但我不希望人们(除了我)弄乱存储的数据(格式化标签或在那里写信息)。我发现防止这种情况的唯一方法(如果我错了,请纠正我)是为标签设置密码。但是,NTAG213和Ultralight C都只有32位密码。它够好吗?还有另一种方法可以阻止某人(除了我)写数据吗?
问题3)我可以在此类代码上使用哪些其他安全措施来强制执行安全措施(代码和应用程序层)?
问题4)当你比较标签安全性(MIFARE DESFire> Ultralight> NTAG213> MIFARE Classic)时,真正被比较的是什么?在未经许可的情况下,很容易破解(本机标签)加密或标签上的一个商店(任何东西)的易用性?
问题5)我看到一些更安全的其他技术(MIFARE DESFire,ICODE SLIX,Infineon Cipurse),这让我想知道我使用的技术(NTAG213)或超轻C)足以存储某人的平衡。你(以及那个人的意见)会说NTAG213具有应用级加密和32位密码,足以满足这类应用吗?一个人真正打破其安全需要多长时间?
答案 0 :(得分:3)
首先,"更安全"取决于您的实际保护目标。既然您想在卡上存储余额(现金钱!),您可能希望(至少)保护以实现以下目标:
此外,您可能也不想信任运营商(接受付款和执行充值的人)。在一组运营商仅执行充值而另一组仅执行支付交易的系统中,可能不允许后一组运行"创建"钱。特别是,您必须非常清楚自己是否完全信任在现场使用的(Android)设备来执行这些操作,以及您是否信任操作员(例如,他们不会对这些设备执行任何攻击)
此外,您可能需要考虑隐私方面(例如,如果余额可以自由阅读,如果用户是可识别的等等)。
让我们来看看你的应用程序级加密"增加了安全性:
因此,让我们看看NTAG213可以用来保护系统的其他功能:
MIFARE Ultralight C会添加以下内容:
见上文。这可能不是真的。
密码/身份验证密钥可能有所帮助,但请注意由于身份验证与这些标记平台上的读/写分离而导致的限制。
事实并非如此。 NTAG213有一个32位密码。 MIFARE Ultralight C使用更复杂的2K-3DES认证机制和112位密钥。
您的特定系统在很多方面存在缺陷。在我看来,MIFARE Ultralight / NTAG203 / NTAG21x绝对不是一个存储现金的离线系统的好选择。
MIFARE Ultralight C可能适合采取一些预防措施。我绝对不会在无人值守的情况下使用它,我可能会使用在线系统跟踪平衡并监控不一致性。
任何使用对称加密并将加密密钥存储在终端中的东西肯定需要针对恶意运营商采取预防措施。对于运营商(具有一定的知识)来说,从应用程序中提取密钥并生成自己的资金可能相当容易。
答案 1 :(得分:1)
我猜你的问题太宽泛了,并不是所有的子问题,这部分SO都是最合适的。
通过专注于加密强度,你会错过一些东西:如果令牌的低级别安全性很容易被攻击,那么没有人需要破解你的密钥。