代码之家  ›  专栏  ›  技术社区  ›  Paya

RSA私钥加密

  •  4
  • Paya  · 技术社区  · 15 年前

    有什么办法表演吗 在C#?

    我知道标准 RSACryptoServiceProvider System.Security.Cryptography ,但这些类只提供 公钥加密 私钥解密 私钥加密 ,但没有任何可公开访问的函数可执行 私钥加密 .

    我找到了 this article on codeproject 随机值 (这意味着任何值,包括零)。

    你知道一些好的组件(最好是免费的)来执行吗 私钥加密 ?
    .NET 3.5 .

    我知道这通常被认为是使用非对称加密(使用私钥加密和使用公钥解密)的坏方法,但我只需要这样使用它。

    补充说明

    认为你有

    var bytes = new byte[30] { /* ... */ };
    

    你想用 2048bit RSA

    通常,您会使用数字签名(即。 RIPEMD160 ),然后将其附加到原始字节并发送到接收器。

    所以,你有 30字节 额外256字节 数字签名(因为它是 2048位RSA 286字节 . 只有霍维耶 160位 那是什么 256字节 1888位 ( 236字节

    所以,我的想法是:

    走吧 30字节 对于原始数据,附加哈希( 20字节 . 你得到了吗 256字节 长消息,比 286字节 ,因为“您能够将实际数据推送到数字签名中”。

    MSDN
    Eggheadcafe.com
    c-plusplus.de
    MSDN Blog
    Wiki

    DSA资源

    CodeProject
    MSDN 1
    MSDN 2
    MSDN 3

    最终解决方案

    如果有人对我如何解决这个问题感兴趣,我会用 1024bit DSA SHA1 Windows 2000 40字节

    4 回复  |  直到 15 年前
        1
  •  3
  •   Accipitridae    15 年前

    您试图设计的是一个“带消息恢复的签名方案”。

    设计一个新的签名方案是很困难的。设计一个新的带有消息恢复的签名方案比较困难。我不知道你的设计的所有细节,但它很有可能会受到选定的消息攻击。

    一种具有消息恢复的签名方案是RSA-PSS-R。但不幸的是,这项提议被一项专利所覆盖。

    ieeep1363标准化小组曾经讨论过添加带有消息恢复的签名方案。然而,我不确定这项工作目前的状况,但可能值得一试。

        2
  •  2
  •   Aren    15 年前

    在.NET中,您的私人;公钥存储在 RSAParameters 结构。结构包含以下字段:

    • D级
    • DP公司
    • DQ公司
    • 指数
    • 反向EQ
        3
  •  2
  •   Steven Sudit    15 年前

    1. 使用加密强RNG创建会话密钥。

    2. 通过PKE传输。

    3. 使用会话密钥生成一个HMAC-SHA1(或HMAC-RIPEMD160,或其他什么)。

    4. 如果对于给定的数据,哈希值的大小大得离谱,那么通过将顶部与底部进行XO运算,将其减半。根据需要重复。

    5. 发送数据和(可能减少的)散列。

    6. 经常更改会话密钥。

    这是一个折衷之间的疯狂滚动自己的系统和使用一个不合适的。

    我愿意接受建设性的批评。。。

        4
  •  1
  •   ladenedge    15 年前

    答案是: 别这么做。

    sig 看起来像 encrypt(hash) , orig + sig 一样 encrypt(orig + hash) . 此外,即使是过时的签名算法,如 PKCS v1.5 不是那么简单 首先。

    像你描述的那种技术为了聪明牺牲了安全性。如果您没有256字节签名的带宽,则需要:

    1. 不同的算法,
    2. 一把小钥匙。

    如果你同意(1),请确定这不是你编的算法!简单的事实是 crypto is hard .