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 签名不同吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android应用程序使用不同或相同的密钥签名吗?

sha256双向加密吗

您可以使用不同但“兼容”的签名覆盖接口方法吗?

自签名SSL证书是啥?有用吗

自签名SSL证书是啥?有用吗?

与对称密钥相比,用对称密钥签名JWT会更有用吗?