DES-MAC 与 DES-MAC 签名不同吗?
Posted
技术标签:
【中文标题】DES-MAC 与 DES-MAC 签名不同吗?【英文标题】:Is DES-MAC different from DES-MAC Signature? 【发布时间】:2020-08-30 18:30:39 【问题描述】:我编写了一个简单的 Javacard 小程序来使用 ALG_DES_MAC8_NOPAD 签名计算输入数据的签名,如下所示:
package testPrj ;
import javacard.framework.*;
import javacard.security.*;
public class testPrj extends Applet
private Signature sig8;
private DESKey key8;
public static void install(byte[] bArray, short bOffset, byte bLength)
new testPrj();
public testPrj()
sig8 = Signature.getInstance(Signature.ALG_DES_MAC8_NOPAD, false);
key8 = (DESKey)KeyBuilder.buildKey(KeyBuilder.TYPE_DES_TRANSIENT_DESELECT, KeyBuilder.LENGTH_DES, false);
register();
public void process(APDU apdu)
if (selectingApplet())
return;
byte[] buf = apdu.getBuffer();
switch (buf[ISO7816.OFFSET_INS])
case (byte)0x00:
apdu.setIncomingAndReceive();
key8.setKey(buf, ISO7816.OFFSET_CDATA);
sig8.init(key8, Signature.MODE_SIGN, buf, (short)(ISO7816.OFFSET_CDATA + 8), (short)8);
sig8.sign(buf, (short)(ISO7816.OFFSET_CDATA + 16), (short)8, buf, (short)0);
apdu.setOutgoingAndSend((short)0, (short)8);
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
正如您在上面看到的,这个小程序只支持一个 APDU 命令。该命令的前 8 个字节是 DES 密钥,后 8 个字节是 IV,最后 8 个字节是我们要计算其签名的输入数据。
现在,我们可以使用 Key = 11 11 11 11 11 11 11 11
和 IV = 22 22 22 22 22 22 22 22
计算 33 33 33 33 33 33 33 33
的签名,如下所示:
// Select Applet
Send: 00 A4 04 00 06 <Applet AID> 00
Recv: 90 00
// Request DES Signature
Send: 00 00 00 00 18 11 11 11 11 11 11 11 11 22 22 22 22 22 22 22 22 33 33 33 33 33 33 33 33
Recv: F4 03 79 AB 9E 0E C5 33 90 00 <== DES Signature + Status Words
好的,现在看看这张照片(来自an online tool):
您可能注意到,输出与小程序的响应相同。
因此,我得出结论,DES_MAC8 签名等同于 CBC 模式下的 DES 加密。
好吧,现在看一下从 RFC 中引用的关于 DES-MAC 的定义:
6.4.6。 DES 密码块链式校验和 (des-mac)
DES-MAC 校验和是通过在前面加上一个 8 个八位字节混杂来计算的 到明文,对结果执行 DES CBC 模式加密 使用密钥和零初始化向量,取最后一个 密文块,预先添加相同的混淆器并加密 在密码块链接 (CBC) 模式下使用 DES 的对使用 a 密钥的变体,其中变体通过异或计算 具有常数 F0F0F0F0F0F0F0F0 的键。初始化向量 应该为零。生成的校验和为 128 位(16 个八位字节)长, 其中 64 位是冗余的。该校验和是防篡改的,并且 防碰撞。
显然,这个定义与 applet/online-tool 中发生的定义不同。所以:
问题:它们有不同的用途吗?换句话说,DES-MAC 是否证明了 DES-MAC 签名无法证明的东西(反之亦然)?
【问题讨论】:
这里有两个概念。 CBC-MAC with DES,即CBC-MAC首先用DES定义,DES-MAC定义在RFC中。 CMC-MAC 有问题,请参阅 Wikipedia。您对 DES 有限制吗? 为什么标记为macos? 【参考方案1】:原因很简单,您引用的 DES-MAC 是 specific to Kerberos 5。它不是 CBC-MAC,尽管它似乎使用相同的 CBC 模式。
【讨论】:
以上是关于DES-MAC 与 DES-MAC 签名不同吗?的主要内容,如果未能解决你的问题,请参考以下文章