HSM解密+加密链接

2023-12-14

我的应用程序充当交换机,在两方之间传输非常敏感的消息,我试图弄清楚如何在不“查看”他们试图发送的消息的情况下做到这一点。

我有一个 HSM,并且我已经为发送者生成了一个密钥对 - 他们将使用我提供给他们的公钥来加密消息,而我可以使用 HSM 中的私钥来解密该消息。

然后,我将通过使用我拥有的最终接收者的公钥对其进行加密来传递该消息。

有没有什么方法可以在 HSM 内链接这两个操作,而不会将解密的消息放在我的应用程序内存附近?我希望明文内容永远不会离开 HSM 的边界。

我知道一些 HSM 具有 CodeSafe / SEE 机器功能,可以让我编写嵌入式系统代码并在 HSM 内运行它,在我开始讨论之前,我想看看是否有办法使用通用 PKCS / JCE / CNG API安全地做到这一点。


如果您需要的只是使用不同的密钥重新加密相同的秘密,您可以使用C_Unwrap创建一个具有翻译秘密值的临时 HSM 对象,然后使用C_Wrap为所有接收者加密该临时 HSM 对象的值。

这样秘密就永远不会离开 HSM。

像这样的东西(已验证可以在带有 RSA-OAEP 的 SafeNet Luna 7 上工作):

// Your private key for 'decrypting' secret. Must have key unwrapping allowed
CK_OBJECT_HANDLE hsmPrivateKey = ... ;

// Encrypted secret
byte[] wrappedKey = ... ; // 

// Template for temporal generic secret key with value of the secret
CK_ATTRIBUTE[] tempTemplate = new CK_ATTRIBUTE[] {
        new CK_ATTRIBUTE(CKA.CLASS, CKO.SECRET_KEY),
        new CK_ATTRIBUTE(CKA.KEY_TYPE, CKK.GENERIC_SECRET),
        new CK_ATTRIBUTE(CKA.TOKEN, false),
        new CK_ATTRIBUTE(CKA.PRIVATE, true),
        new CK_ATTRIBUTE(CKA.EXTRACTABLE, true),
        new CK_ATTRIBUTE(CKA.SENSITIVE, true),
        new CK_ATTRIBUTE(CKA.ENCRYPT, false),
        new CK_ATTRIBUTE(CKA.DECRYPT, false),
        new CK_ATTRIBUTE(CKA.WRAP, false),
        new CK_ATTRIBUTE(CKA.UNWRAP, false),
        new CK_ATTRIBUTE(CKA.SIGN, false),
        new CK_ATTRIBUTE(CKA.VERIFY, false),
        new CK_ATTRIBUTE(CKA.DERIVE, false)
};

// Unwrapping/decryption mechanism
CK_MECHANISM mechanism = ... ;

// Handle for temporal generic secret key with value of the secret
CK_OBJECT_HANDLE temporalValueHandle = new CK_OBJECT_HANDLE();

// Unwrap/decrypt the secret into temporal key
CryptokiEx.C_UnwrapKey(session, mechanism, hsmPrivateKey, wrappedKey, wrappedKey.length, tempTemplate, tempTemplate.length, temporalValueHandle);

// Wrap/encrypt the secret for recipients. Recipient public keys must have key wrapping allowed
for(CK_OBJECT_HANDLE recipientPublicKey : ... ) {
    LongRef resSize = new LongRef(0);
    CryptokiEx.C_WrapKey(session, mechanism, recipientPublicKey, temporalValueHandle, null, resSize);
    byte[] rewrappedKey = new byte[CryptokiUtils.safeIntCast(resSize.value)];
    CryptokiEx.C_WrapKey(session, mechanism, recipientPublicKey, temporalValueHandle, rewrappedKey, resSize);
    System.out.println("Re-wrapped key: " + bytesToHexString(rewrappedKey));
}

// Delete temporal generic secret key
CryptokiEx.C_DestroyObject(session, temporalValueHandle);

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HSM解密+加密链接 的相关文章

  • 为什么我的代码不能根据字典解码加密字符串?

    我有一本字典 其中包含代表字母的键和值 例如一个简单的 DICT CODE b g n a p o x d t y 我收到了一个加密代码 并将该字符串转换为一个列表 其中每个项目都是一个单词 我需要根据字典中的项目来解决它 代码示例是 wo
  • CryptoJS 和 Pycrypto 一起工作

    我正在使用 CryptoJS v 2 3 加密 Web 应用程序中的字符串 并且需要在服务器上使用 Python 对其进行解密 因此我使用 PyCrypto 我觉得我错过了一些东西 因为我无法让它工作 这是JS Crypto AES enc
  • 在java中加密文本文件的最简单方法

    对于我的学校项目 我必须证明我可以在程序中利用文件处理 为此 我做了一个非常简单的登录过程 您可以在其中创建一个帐户 将用户名和密码写入资源文件夹中的文本文件 显然 这根本没有安全性 因为它的设计目的并不是为了展示文件处理的安全性 但是我的
  • 如果用户可以解密 web.config,那么加密它有什么意义呢?

    哎呀 一些供应商告诉我的老板 不加密 web config 是一个很大的安全漏洞 这对我来说听起来像是废话 我的意思是 如果有人破坏了服务器 我们不是就完蛋了吗 就像 Joelt 所建议的那样 ASP NET 最近出现了一个安全问题 允许人
  • 在 React Native 和 Expo 中加密敏感数据

    我正在使用 React Native 开发一个移动应用程序Expo https expo io 提供安全解决方案 项目所有者希望在应用程序中存储敏感的授权密钥 用于与 REST 服务器通信并访问安全数据 他要求这些密钥至少是加密的 并且尽可
  • 使用 CommonCrypto 的 Swift AES 加密

    我正在开发一个 iOS 应用程序代码7 1 with 斯威夫特2 1我正在尝试进行简单的加密AES 128 位 and PKCS7填充使用通用加密库 该代码有效 但每次我尝试投射NSData反对NSString然后对于 String 我得到
  • Silverlight:加密Web服务的用户名和密码

    加密不是我的强项 我正在 Silverlight 3 中编写一个应用程序 它与 Web 服务通信以对用户进行身份验证 Web 服务不一定在 SSL 下托管 我正在尝试找到一种在传递用户名和密码之前对其进行可逆加密的方法 该方法不依赖于将密钥
  • Oracle 函数中的加密/解密密码

    由于以前设计不佳的结构 我必须使用的当前数据库将用户密码存储为文本 现在 我正在构建一个必须使用这些密码的前端部分 我当然不想发送未加密的密码 我的想法是编写一个 Oracle 函数来加密和解密文本密码 并在存储过程中使用这些函数来返回加密
  • 线程“main”中的异常 java.security.UnrecoverableKeyException:给定的最终块未正确填充

    大家好 我使用 AES 进行加密 我所做的是在文本文件中加密数据并存储给定位置 如果在同一个类文件中给出 解密工作正常 我创建了一个不同的 java 类来解密该文件 我使用带有用户名和密码的 Javakeystore 来存储密钥并检索它并使
  • 如何检查 AJAX 请求的真实性

    我正在设计一个网站 让用户尽快解决谜题 JavaScript 用于为每个谜题计时 当谜题完成时 毫秒数通过 AJAX 发送到服务器 如何保证服务器收到的时间不是用户伪造的 我不认为基于会话的真实性令牌 Rails 中用于表单的那种 就足够了
  • 如何与 SecretKeySpec 一样加密 ruby​​ 中的数据?

    我正在尝试使用带有 AES 算法的 Cipher 来加密 ruby 中的字符串 我有用Java编写的示例 我从这个例子中得到了帮助 并用 Java 编写了代码 但无法获得与 JAVA 中相同的输出 下面是用java编写的代码 import
  • PyCrypto:生成受 DES3 密码保护的 RSA 密钥

    我已经能够使用 DES3 创建受密码保护的 RSA 密钥 嗯 I think因为我对这个加密世界非常陌生 使用以下命令 openssl genrsa out tmp myKey pem passout pass f00bar des3 20
  • 如何将 Pkcs11Interop 与 NitroKey HSM 结合使用来派生与 EC 的共享密钥

    我购买了 NitroKey HSM 并设法在其上创建了 EC 现在我想导出一个共享秘密 我发现Pkcs11互操作 https github com Pkcs11Interop 这似乎是完成这项工作的正确工具 但处理方式尚不清楚 代码片段或工
  • 对 Java 安全性和 BouncyCastle API 感到茫然和困惑

    我一直在尝试理解 Java 的 BouncyCastle 加密 API 不幸的是 我发现 Java 密码学总体上被服务提供者接口和术语所掩盖 以至于我无法理解任何东西的实际作用 我已经尝试反复阅读必要的文档 但它仍然难以理解 引入了许多远远
  • 如何从 AES 加密字符串添加/删除 PKCS7 填充?

    我正在尝试使用 128 位 AES 加密 ECB 来加密 解密字符串 我想知道如何添加 删除 PKCS7 填充 看起来 Mcrypt 扩展可以处理加密 解密 但必须手动添加 删除填充 有任何想法吗 让我们来看看 RFC 5652 加密消息语
  • 获取 Wi-Fi 配置文件信息

    我使用的是 Windows 8 1 它没有工具 带有 GUI 来管理 wifi 网络配置文件 所以我正在写一篇对我有帮助的文章 我做了一些谷歌搜索并发现托管 Wifi API https managedwifi codeplex com 并
  • 恢复 SQL Server 数据库 - 主密钥未打开

    我必须制作远程 SQL Server 数据库的本地副本 我通过使用 Management Studio 中的 任务 gt 备份 来完成此操作 然后 我在本地恢复了备份 该备份似乎包含了所有内容 表 用户 对称密钥和证书 当我尝试执行需要打开
  • 使用 AES SecretKey 的 Java KeyStore setEntry()

    我目前正在 Java 中开发一个密钥处理类 特别是使用 KeyStore 我正在尝试使用 AES 实例生成 SecretKey 然后使用 setEntry 方法将其放入 KeyStore 中 我已经包含了代码的相关部分 The KS Obj
  • Delphi AES 库 (Rijndael) 使用 KAT Vectors 进行测试

    对于这两个库 Delphi 加密概要 v 5 2 http code google com p delphidec TurboPower 密码箱 v 2 07 http lockbox seanbdurkin id au tiki list
  • HMC SHA1 哈希 - C# 生成与 Ruby 不同的哈希输出

    我正在尝试为我正在使用的第三方服务快速获取一个有缺陷的 Net 客户端库 原始库 可以运行 是用 Ruby 编写的 但 DotNet 的等效库会向 Ruby 库生成不同的哈希输出 Ruby加密代码如下 def self encrypt st

随机推荐

  • 如何始终在 MSBuild 中执行目标

    我有一个 MSBuild 文件 它在编译应用程序之前操作 AssemblyInfo 文件 在构建结束时 它会恢复 AssemblyInfo 文件 它通过备份文件 操作文件 然后在构建时间后恢复文件来实现此目的 除非在构建过程中发生错误 否则
  • ASP.NET 数据缓存 - 在应用程序域重新启动后保留内容

    我正在使用 ASP NET 的数据缓存 API 例如 HttpRuntime Cache Insert my data my key 有没有办法配置缓存 以便在应用程序域回收时保留其内容 我将许多对象加载到缓存中 但是每次应用程序域重新启动
  • PowerShell - 如何迭代 PSCustomObject 嵌套对象?

    我觉得这很简单 但我只是不明白 我不确定我的解释是否很好 我有下面的 JSON 文件 我想在 New 对象下获取 每个应用程序 App1 App2 App3 在下面的脚本行中 我本质上是尝试用一些变量替换 TestApp2 我想我正在尝试在
  • 删除第二个冒号后的文本

    我需要删除第二个冒号之后的所有内容 我有几种日期格式 需要使用相同的算法进行清理 a lt 2016 12 31T18 31 34Z b lt 2016 12 31T18 31Z 我尝试匹配两个列组 但我似乎无法找出如何删除第二个匹配组 s
  • Python简单数字比较

    问题 计算机随机生成一个数字 用户输入一个数字 计算机会告诉你是否太高或太低 然后你将继续猜测 直到猜出数字为止 我的解决方案 import random computer random randint 1 500 def guessNum
  • Robotium:请安装兼容的 Android API 级别(15 或更高)

    尝试运行新的 Robotium 测试时出现此错误 有谁知道如何修理它 我拥有所需的所有 API 15 以及许多更高的 API 我缺少什么 这是我的 gradle 文件的一部分 android compileSdkVersion 25 bui
  • 将查询合并为一个

    我有以下疑问 Query 1 SELECT so ClientID All Channels as CustomerGroup so StatementID so Brand so Product Sum so Amount Amount
  • WaitHandle.WaitAny 匹配 WaitForMultipleObjects 功能

    我正在移植C API代码到 NET并研究函数调用WaitHandle WaitAny作为替代品WaitForMultipleObjects但是当调试时 NET4我可以看到这个函数被挂接到 private static extern int
  • 仅需要实体 ID 时如何避免初始化 Hibernate 代理

    For a ManyToOneJPA 实体中的关系 我只对实际的 id 引用感兴趣 而不是获取与该关系关联的整个模型 以这些 Kotlin JPA 实体为例 Entity class Continent Id var id String v
  • React 动态设置状态属性及其值[重复]

    这个问题在这里已经有答案了 我有以下组件 import React Component from react import Action from action jsx import SingleGridEl from singleGrid
  • RecyclerView 在使用 FirebaseRecyclerAdapter 首次启动时不会加载数据

    我在用着FirebaseRecyclerAdapter填充一个RecyclerView in a Fragment 这是我的代码 mDatabase FirebaseDatabase getInstance getReference myA
  • iText 在 sandbox.stamper.SuperImpose.java 中设置创建日期和修改日期

    我正在尝试在中设置创建日期和修改日期将一个 PDF 的内容叠加到另一个 PDF 中例如 sandbox stamper SuperImpose java 原则 我认为 很明确 use getInfo 然后做 info put PdfName
  • Facebook Like 按钮有时出现有时不出现

    我的网站上的类似按钮有奇怪的问题 当我进入页面时它会正确显示 刷新后它不会出现并且我有 javascript 错误 FB provide is not a function Break on this error FB provide Ar
  • 并排对齐多个表格

    以下代码生成 2 个相互叠加的表 我将如何设置它以使它们并排对齐 例如连续3个 title sample output pdf document r global options R options knitr opts chunk set
  • 将 varchar 数据类型转换为 datetime 数据类型导致值超出范围

    我有以下从 C Windows 服务运行的内联 SQL UPDATE table name SET status cd 2 sdate CAST 03 28 2011 18 03 40 AS DATETIME bat id 33acff9b
  • JPA实体:从Oracle DATE列获取小时、分钟和秒

    我无法从 Oracle 数据库获取完整的日期信息 dd mm yyyy hh mm ss 在数据库级别 在我想要接收的列中设置测试值 update my table set my date column to date 2011 06 15
  • 异步套接字

    如何与多个客户端连接 与多个客户端连接后 我如何从每个客户端接收单独的数据 据我所知 我需要使用名为 Asyncore 的东西 我该如何实施 客户类别 import socket class Client def init self sel
  • Python / Kivy 应用程序仅运行一次

    我正在使用 Anaconda 平台的 Spyder IDE 运行一个非常简单的 python 3 5 脚本 from kivy app import App from kivy uix label import Label from kiv
  • 如何在 Idris 中表达范围有效性?

    我正在尝试在 Idris 中构建一个简单的调查表单 目前正在努力验证用户输入 该输入以字符串形式出现 所提出问题的类型 目前我有以下几种类型 data Question Type where QCM numOptions Nat gt qu
  • HSM解密+加密链接

    我的应用程序充当交换机 在两方之间传输非常敏感的消息 我试图弄清楚如何在不 查看 他们试图发送的消息的情况下做到这一点 我有一个 HSM 并且我已经为发送者生成了一个密钥对 他们将使用我提供给他们的公钥来加密消息 而我可以使用 HSM 中的