标签: cmac

使用 NTAG 424 DNA TT 的认证技巧

我需要在阅读器和 NFC 标签之间实施身份验证程序,但由于我在这方面的知识有限,我将感谢一些帮助以理解一些概念。

提前原谅我改写圣经,但我无法对其进行更多总结。

有很多标签系列(ICODE、MIFARE、NTAG...),但经过研究,我认为 NTAG 424 DNA 符合我的要求(我主要需要身份验证功能)。

它带有 AES 加密、CMAC 协议和 3 遍身份验证系统,这就是我开始需要帮助的时候。

AES -> 正如我所关心的,这是一种通过排列和映射来加密纯文本的分组密码。是一种对称标准,它不使用主密钥,而是使用会话密钥,它们是从主密钥派生的。(Q01:我不知道这些密钥在标签中的存储位置。密钥必须存储在专门的硬件上,但除了 MIFARE SAM 标签外,没有标签“规格”对此进行说明。)

CMAC -> 它是 CBC-MAC 的一种改变,使动态大小消息的身份验证安全。如果数据不是机密的,那么 MAC 可以用于明文来验证它们,但是为了获得机密性和身份验证功能,必须追求“加密比 mac”。这里也使用了会话密钥,但与加密步骤中使用的密钥不同。(Q02:CMAC的整体观点可能是一个实现验证和保密的协议,这是我的观点,可能是错误的。)

3-pass-protocol -> ISO/IEC 9798-2 规范,其中标签和阅读器相互验证。它还可以使用 MAC 和会话密钥来完成此任务。(Q03:我认为这是所有系统的上层来验证标签和阅读器。“3 pass 协议”在 MAC 中中继才能起作用,如果还需要机密性功能,那么可能会使用 CMAC 而不是单个 MAC .CMAC 需要 AES 才能正常工作,在每个步骤中应用会话密钥。如果我发布了 savages 错误,请纠正我)

/*********/

PS:我知道这是一个与编码相关的论坛,但我肯定可以在这里找到比我更了解密码学的人来回答这个问题。

PSS:我完全不知道标签端的主密钥和会话密钥保存在哪里。它们是否需要与主 NFC 电路一起包含在单独的硬件中?

(目标)

这是为了实现标签和阅读器之间的相互验证过程,使用 NTAG 424 DNA TagTamper 标签。(目标是避免 3º 方复制,以身份验证而不是消息机密性为主要部分)

缺乏密码学知识并试图了解如何在此 NTAG 上使用 AES、CMAC 和相互验证。

(额外信息)

NTAG 424 DNA TT: https ://www.nxp.com/products/identification-security/rfid/nfc-hf/ntag/ntag-for-tags-labels/ntag-424-dna-424-dna-tagtamper-advanced - …

authentication encryption aes nfc cmac

9
推荐指数
1
解决办法
1286
查看次数

使用OpenSSL EVP_DigestSign*生成CMAC密钥失败

我正在尝试生成使用OpenSSL计算CMAC的密钥.

但是,这些似乎失败了,下面复制了错误消息.有人能指出问题所在吗?有人EVP_DigestSign*打电话给CMAC 吗?

以下是代码的一部分,该代码是通过https://wiki.openssl.org/index.php/EVP_Key_and_Parameter_Generation中的示例构建的:

BIO *out = NULL;   
out = BIO_new(BIO_s_file());

if (out == NULL)
        return -1;
BIO_set_fp(out, stdout, BIO_NOCLOSE);

EVP_MD_CTX* rctx = NULL;
EVP_PKEY *pkey = NULL;
EVP_PKEY_CTX *kctx = NULL;

rctx = EVP_MD_CTX_create();
if(rctx == NULL) {
    printf("EVP_MD_CTX_create failed\n");
}
 if(!EVP_PKEY_keygen_init(kctx)){
     printf("EVP_PKEY_keygen_init failed\n");
}

if (EVP_PKEY_CTX_ctrl(kctx, -1, EVP_PKEY_OP_KEYGEN,EVP_PKEY_CTRL_CIPHER,0, (void *)EVP_aes_256_ecb()) <= 0)
    printf("EVP_PKEY_CTX_ctrl 1  failed\n");

if (EVP_PKEY_CTX_ctrl(kctx, -1, EVP_PKEY_OP_KEYGEN,EVP_PKEY_CTRL_SET_MAC_KEY,/*key length*/32, "01234567890123456789012345678901") <= 0)
    printf("Set the key data failed 1\n");
Run Code Online (Sandbox Code Playgroud)

这里的错误:

EVP_PKEY_CTX_ctrl failed
3073898120:error:06093096:lib(6):func(147):reason(150):pmeth_gn.c:122:
3073898120:error:06089093:lib(6):func(137):reason(147):pmeth_lib.c:390: …
Run Code Online (Sandbox Code Playgroud)

openssl cmac

7
推荐指数
1
解决办法
962
查看次数

使用 openssl 作为命令行计算 AES128 CMAC

我正在寻找一个可以将 AES128 CMAC 作为命令行计算的工具。Openssl 似乎没有通过命令行提供此功能。我是否错过了什么,或者您知道可以执行此计算的命令行工具吗?

linux openssl cryptography aes cmac

5
推荐指数
1
解决办法
7796
查看次数

如何使用 Bouncycastle 的 CMac

我正在尝试使用 BouncyCastle 的 CMac 实现,但显然我做错了。至少以下单元测试(基于 RFC 5297 测试向量)失败:

@Test
public void testCMacOfZeros() {
    byte[] key = {(byte) 0xff, (byte) 0xfe, (byte) 0xfd, (byte) 0xfc, //
            (byte) 0xfb, (byte) 0xfa, (byte) 0xf9, (byte) 0xf8, //
            (byte) 0xf7, (byte) 0xf6, (byte) 0xf5, (byte) 0xf4, //
            (byte) 0xf3, (byte) 0xf2, (byte) 0xf1, (byte) 0xf0, //
            (byte) 0xf0, (byte) 0xf1, (byte) 0xf2, (byte) 0xf3, //
            (byte) 0xf4, (byte) 0xf5, (byte) 0xf6, (byte) 0xf7, //
            (byte) 0xf8, (byte) 0xf9, (byte) 0xfa, (byte) 0xfb, //
            (byte) …
Run Code Online (Sandbox Code Playgroud)

java bouncycastle aes cmac siv-authenticated-encryption

5
推荐指数
1
解决办法
4691
查看次数

CMAC 为什么选择 K1 和 K2

http://en.wikipedia.org/wiki/CMAC

http://www.rfc-archive.org/getrfc.php?rfc=4493

有两个键K1和K2。除了消息 1 与 10^127(1 和 127 个零)不同之外,还有其他原因吗

如果消息携带长度(并且长度也是 CMAC-ed 的消息),仅使用一个随机生成的 K 是否存在任何安全弱点?

cryptography cmac message-authentication-code

4
推荐指数
1
解决办法
3538
查看次数

如何在 javascript 中生成 CMAC-AES

我正在尝试使用斯坦福 Javascript 加密库为 OAuth 2.0 断言生成 CMAC-AES 令牌,但我远不是密码学专家。有人可以举一个使用 sjcl 或任何开放许可的 js 库的例子吗?我什至不确定是否可以使用 sjcl 的现有功能。

我尝试使用我在这个问题中看到的选项对象,但我不了解模式或其他选项,我找不到任何关于此的文档。我认为 salt 和 iv(要成为可复制的 MAC)必须是静态的,但我不知道它们应该是什么值。

// is there a way that works?
var token = sjcl.encrypt(secret,assertion,{salt:foo,iv:bar});
Run Code Online (Sandbox Code Playgroud)

一点背景……这是将原生移动应用程序(iOS 和 android)重写为单个混合应用程序(Cordova、HTML、CSS 和 JavaScript),我希望尽可能多地在 JavaScript 中共享代码. 这不会在“不安全”的浏览器环境中运行,而是在本机 WebViews 中运行。如果您知道其他安全问题,我想听听。

否则我想我将不得不编写一个插件来从本机实现传递 CMAC。

忘了提,我也在使用 Dojo,我知道 dojox.encoding.crypto 但问题对我来说是一样的。不确定它是否可以执行 CMAC 或需要多少修改才能使其工作。

javascript dojo cryptography oauth cmac

4
推荐指数
1
解决办法
1763
查看次数

AES CMAC计算C#

我知道MAC是最后一个块加密的第一个字节,并且在这里找到了这个CMAC解释,但它有点难以理解.也许已经有一些CMAC AES问题但我很抱歉我无法理解它.

任何人都可以解释如何计算CMAC?如果需要,可以使用C#中的一些示例代码.谢谢

c# encryption aes cmac message-authentication-code

3
推荐指数
1
解决办法
6860
查看次数

如何使用OpenSSL的CMAC_xxx函数计算AES CMAC?

有没有办法用OpenSSL/ 计算AES CMAC libcrypto

优选地,以利用AES-NI(或任何其他硬件加速)的方式.

另请参见使用OpenSSL EVP_DigestSign*生成CMAC密钥失败

openssl libcrypto cmac

2
推荐指数
1
解决办法
7663
查看次数