首页 > 解决方案 > 来自硬件的 Tripledes

问题描述

using System;
using System.Security.Cryptography;

namespace SmartCardSign
{
    class SCSign
    {
        static void Main(string[] args)
        {
            // To idendify the Smart Card CryptoGraphic Providers on your
            // computer, use the Microsoft Registry Editor (Regedit.exe).
            // The available Smart Card CryptoGraphic Providers are listed
            // in HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.


            // Create a new CspParameters object that identifies a 
            // Smart Card CryptoGraphic Provider.
            // The 1st parameter comes from HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider Types.
            // The 2nd parameter comes from HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.
            CspParameters csp = new CspParameters(1, "Schlumberger Cryptographic Service Provider");
            csp.Flags = CspProviderFlags.UseDefaultKeyContainer;

            // Initialize an RSACryptoServiceProvider object using
            // the CspParameters object.
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);

            // Create some data to sign.
            byte[] data = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };

            Console.WriteLine("Data         : " + BitConverter.ToString(data));

            // Sign the data using the Smart Card CryptoGraphic Provider.
            byte[] sig = rsa.SignData(data, "SHA1");

            Console.WriteLine("Signature    : " + BitConverter.ToString(sig));

            // Verify the data using the Smart Card CryptoGraphic Provider.
            bool verified = rsa.VerifyData(data, "SHA1", sig);

            Console.WriteLine("Verified     : " + verified);

        }
    }
}

是否可以用三元组实现相同的功能?我试过但找不到解决方案。

链接:https ://docs.microsoft.com/en-us/dotnet/standard/security/how-to-access-hardware-encryption-devices

标签: c#cryptography

解决方案


一般你不能。原因相对简单:对称密码(例如三重 DES)对于个人对个人密码学(例如签名生成(或对称算法的 MAC)或加密)不是很有用。

非对称密码的优点是您可以将加密密钥分发给其他人。为此,其他人需要确定他们收到了正确的密钥:密钥需要被信任。为此,需要设置公钥基础设施或 PKI。已知的 PKI 是基于 X.509 证书的 PGP 和 PKIX - 与用于 HTTPS 连接的相同。

因此,只有当其他实体可以使用相同的密钥时,智能卡上的三重 DES 才有意义。这只是为了获得微小的性能提升,因为您也可以使用公钥进行加密,即使在软件中也是如此。然后您可以使用卡上的私钥解密。通常使用混合密码系统,其中使用 RSA 建立对称密钥(例如三重 DES 密钥),然后使用该密钥对消息进行加密。

这并不是说不可能——我实际上设计了一个兼容 PKCS#11 的智能卡,但是大多数 PKCS#11 和 CSP 的实现不支持 3DES,然后你需要一个兼容的智能卡和 3DES 密钥也是。另请参阅BartonJS 的答案


推荐阅读