首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用pycryptodome计算ecies hkdf对称密钥

基础概念

ECIES(Elliptic Curve Integrated Encryption Scheme)是一种基于椭圆曲线密码学的集成加密方案。它结合了椭圆曲线密钥交换和对称加密,提供了一种安全的加密通信方法。HKDF(HMAC-based Key Derivation Function)是一种基于HMAC的密钥派生函数,用于从共享密钥或其他秘密值中派生出一个或多个密钥。

相关优势

  1. 安全性:ECIES利用椭圆曲线密码学的高安全性,提供了强大的加密保护。
  2. 灵活性:HKDF可以从一个共享密钥中派生出多个密钥,适用于不同的应用场景。
  3. 效率:相比于传统的RSA加密,椭圆曲线加密在相同的安全强度下具有更高的计算效率。

类型

  • ECIES:一种基于椭圆曲线的集成加密方案。
  • HKDF:一种基于HMAC的密钥派生函数。

应用场景

  • 安全通信:在需要加密通信的场景中,如TLS/SSL协议。
  • 数据加密:对敏感数据进行加密存储或传输。
  • 身份验证:结合数字签名实现身份验证。

示例代码

以下是使用pycryptodome库计算ECIES HKDF对称密钥的示例代码:

代码语言:txt
复制
from Crypto.PublicKey import ECC
from Crypto.Cipher import AES, PKCS1_OAEP
from Crypto.Random import get_random_bytes
from Crypto.Hash import HMAC, SHA256

# 生成椭圆曲线密钥对
key = ECC.generate(curve='P-256')
private_key = key.export_key(format='DER')
public_key = key.public_key().export_key(format='DER')

# 假设对方公钥已知
peer_public_key = ECC.import_key(public_key)

# 使用HKDF派生对称密钥
shared_secret = peer_public_key.pointQ.x().to_bytes(32, 'big')
hkdf = HMAC.new(shared_secret, digestmod=SHA256)
hkdf.update(b'context information')
symmetric_key = hkdf.digest()[:16]  # 使用前16字节作为AES密钥

# 使用对称密钥加密数据
cipher = AES.new(symmetric_key, AES.MODE_EAX)
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(b'secret data')

# 解密数据
cipher = AES.new(symmetric_key, AES.MODE_EAX, nonce=nonce)
plaintext = cipher.decrypt_and_verify(ciphertext, tag)

print("Plaintext:", plaintext.decode())

参考链接

常见问题及解决方法

  1. 密钥长度不匹配:确保派生的对称密钥长度与加密算法所需的密钥长度一致。
  2. HMAC输入错误:确保HMAC的输入参数(如共享密钥和上下文信息)正确无误。
  3. 椭圆曲线选择:根据安全需求选择合适的椭圆曲线。

通过以上步骤和示例代码,你可以使用pycryptodome库计算ECIES HKDF对称密钥,并进行安全的加密通信。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

计算机网络】网络安全 : 对称密钥分配 ( 密钥分配 | 密钥分配中心 KDC | 对称密钥分配 | 密钥分配协议 | Kerberos 协议 )

文章目录 一、密钥分配 二、密钥分配中心 三、对称密钥分配 四、对称密钥分配说明 五、密钥分配协议 六、Kerberos 协议工作流程 七、Kerberos 协议要求 一、密钥分配 ---- 密钥分配...: ① 网络安全 : 密码算法 是公开的 , 网络安全 基于 对密钥的安全管理 ; ② 密钥管理 : 密钥 的 产生 , 分配 , 注入 , 验证 , 使用 ; ③ 密钥分配 : 是管理中的最重要的问题...分配 临时会话密钥 , 仅使用一次 ; 三、对称密钥分配 ---- 对称密钥分配流程 : ① 用户注册 : 用户 A , B 都是 KDC 的 注册用户 , 各自分配了主密钥 K_A 和 K_B...A , B 会话使用密钥 ; 票据信息加密 : 报文中还包含了一个 需要 A 转给 B 的信息 ( 票据 ) , 这个信息是使用 K_B 进行加密的 , A 不知道其中的信息 ; 票据信息内容..., B 就知道了 A 想要和自己通信 , 并且带来了通信的密钥 ; 四、对称密钥分配说明 ---- 对称密钥分配说明 : ① 加入时间戳 : 加入时间戳 , 可以防止重放攻击 ; ② 用户密钥有效期

6.5K00

使用MySQL Keyring 的 SECRET类型密钥执行非对称加密

作者:Mike Frank 译:徐轶韬 仅用于通过应用程序使用解密/加密 以下是一个示例,演示应用程序使用公钥进行非对称加密数据。...使用此技术,用户可以使用以下方法安全地管理自己的密钥: Oasis KMIP协议实现: Oracle Key Vault Gemalto KeySecure Thales Vormetric Key...Townsend Alliance Key Manager 其他用于密钥管理的API: 使用自己的密钥– 加密密钥文件 Hashicorp Vault 更多 先决条件 MySQL企业版8.0.19或更高版本...您可以使用带有公共或私有密钥(PEM格式)的openssl或兼容库来实现。只要确保您以二进制形式插入/更新数据即可。 如果我的数据大于非对称加密可以处理的数据怎么办?...通过keyring,非对称加密,对称加密,权限和其他访问控制,解决数据安全性的方法还有多种多样的选择。 例如,用户只能将公钥存储在主服务器上,将私钥存储在只读从服务器上。

1.9K40
  • 基于 TLS 1.3的微信安全通信协议 mmtls 介绍(下)

    因此只要在用对称加密算法加密明文后,再用消息认证码算法对密文计算一次消息认证码,将密文和消息认证码发送给 Server,Server 进行验证,这样就能保证安全性了。...3.3.2 密钥扩展 TLS1.3 明确要求通信双方使用对称加密 Key 不能完全一样,否则在一些对称加密算法下会被完全攻破,即使是使用 AES-GCM 算法,如果通信双方使用完全相同的加密密钥进行通信...TLS1.3 使用HKDF密钥扩展,mmtls 也是选用的 HKDF密钥扩展。...为了得到最终认证加密的对称密钥,需要做 3 次 HDKF-Extract 和 4 次 HKDF-Expand 操作,实际测试发现,这种密钥扩展方式对性能影响是很大的,尤其在 PSK 握手情况(PSK 握手没有非对称运算...四、小结 mmtls 是参考 TLS1.3 草案标准设计与实现的,使用 ECDH 来做密钥协商,ECDSA 进行签名验证,AES-GCM 作为对称加密算法来对业务数据包进行认证加密,使用 HKDF 进行密钥扩展

    8.8K10

    深入解析ECC(椭圆曲线密码学)加解密算法

    对于加密大量数据,通常使用对称加密算法(如AES),而ECC可用于安全地交换这些对称密钥。 下面代码使用Java的BouncyCastle库进行ECC密钥对生成、加密和解密的简单示例。...代码中的“加密”实际上是指使用接收方的公钥对一个小消息或对称密钥进行加密,而“解密”是指使用接收方的私钥来解密它。...这里我们使用ECC来加密一个小的消息,但通常我们会用它来加密一个对称密钥。...这是一种混合加密方案,它结合了公钥加密(ECC)和对称加密的优点。在实际应用中,你通常会看到ECC用于建立安全通道,然后在这个通道上交换对称密钥,最后使用对称密钥来加密实际的数据。...由于ECC不是设计用来直接加密大量数据的,因此在实际应用中,你应该使用ECC来安全地交换或协商一个对称密钥(如AES密钥),然后使用这个对称密钥来加密和解密实际的数据。

    94501

    HTTP 安全通信保障:TLS、身份验证、授权

    双方分别得到 zz,根据约定算法计算得到密钥。 整个过程通过自己的私钥,对方的公钥以及 p、q、g 参数、约定的密钥计算算法,就可以生成密钥。第三方需要计算得到私钥很困难,需要解决离散对数问题。...它通过使用伪随机函数来获取所需格式的密钥。 TLS 1.3 使用的是 HKDF(HMAC KDF)[RFC5869],即基于 HMAC 的 KDF 算法。它的原理是先提取再拓展。...HKDF-Extract 的 计算方法如下图: HKDF-Extract(salt, IKM) -> PRK PRK = HMAC-Hash(salt, IKM) salt 为可选参数,使用盐可以提高...第三步, (EC)DHE 的 ZZ 作为输入密钥,和 Derive-Secret(Early Secret, "derived", "") 的计算值作为盐,通过 HKDF-Extract 计算得到 Handshake...这是服务端提供与客户端唯一对应的 API 密钥。 数字签名:基于非对称密钥体系,使用私钥生成签名,公钥验证签名。

    56710

    基于TLS1.3的微信安全通信协议mmtls介绍

    公钥加密组件计算效率往往远低于对称加密组件,直接使用公钥加密组件加密业务数据,这样的性能损耗任何Server都是无法承受的。...TLS1.3使用HKDF密钥扩展,mmtls也是选用的HKDF密钥扩展。   ...mmtls最终使用密钥是有HKDF-Expand扩展出来的。mmtls把info参数分为:length,label,handshake_hash。...为了得到最终认证加密的对称密钥,需要做3次HDKF-Extract和4次HKDF-Expand操作,实际测试发现,这种密钥扩展方式对性能影响是很大的,尤其在PSK握手情况(PSK握手没有非对称运算)这种密钥扩展方式成为性能瓶颈...四、小结   mmtls是参考TLS1.3草案标准设计与实现的,使用ECDH来做密钥协商,ECDSA进行签名验证,AES-GCM作为对称加密算法来对业务数据包进行认证加密,使用HKDF进行密钥扩展,摘要算法为

    5.6K111

    HTTP - TLS1.3 初次解读

    以TLS_AES_128_CCM_SHA256为例,TLS表明该加密组件用于TLS协议,AES表明使用AES对称加密算法,128表示密钥长度为128位,CCM表明分组加密模式,SHA256是HKDF过程使用的哈希算法...ECDHE 全面推广ECDHE加密算法,简单理解是在进行握手的时候使用临时的椭圆函数曲线公钥作为“根”,利用数学公式推导计算交换密钥,而不是传统的非对称加密算法保护堆对称加密密钥和进行密钥协商,每一次TLS...HKDF在PRF基础上通过使用协商出来的密钥材料,和握手阶段报文的哈希值作为输入,可以输出安全性更强的新密钥。...,双方通常会在进行 application_key(主密钥密钥协商计算完成之后,计算出 resumption_key(恢复会话主键),然后使用 resumption_key 与 PSK初始值做HKDF...HKDF所做的改进则是这个主密钥计算过程,加入更多的变化,让这个主密钥更加具备随机性和难以猜测。

    3K10

    Python3 加密解密技术详解

    这时候使用哈希函数需要稳健一点,否则容易被破解。 另一个常见的用法是,计算一个文件的哈希值,然后将这个文件和它的哈希值分别发送。...导入 PyCryptodome 包 打开一个文件用于写入数据 导入公钥赋给一个变量,创建一个 16 字节的会话密钥。...例中使用混合加密方法,即 PKCS#1 OAEP,也就是最优非对称加密填充 创建 AES 加密,然后加密数据,得到加密的文本和消息认证码 将随机数、消息认证码和加密的文本写入文件 这里的随机数通常是真随机或伪随机数...建议使用 Fernet 对称加密算法,它保证了加密信息在不知道密码的情况下不能被篡改或读取。Fernet 还通过 MultiFernet 支持密钥轮换。 2.示例 下面看一个简单的例子: ?...得到了消息字节串形式的纯文本,完成解密 小结 本文浅显地介绍了 PyCryptodome 和 cryptography 这两个包的使用,即关于如何加密解密字符串和文件的简述。

    3.3K50

    对称密钥沉思系列(4):密钥交换

    前面其实我们分析过,分对称密钥比如RSA也是可以做加解密的,那么在实际的通信过程比如TLS中,为什么还需要生成临时的对称密钥呢?...这里最核心的原因有两个:非对称密钥加解密,对于数据量有比较严格的要求,比如RSA算法,在使用OAEP填充模式时,每次最多只能加密190字节。...图片非对称密钥加解密的性能相对于对称密钥,差了很多,在这实际的业务流加解密中,无法进行业务落地。...因此在实际的工程化上,一般使用对称密钥进行数据密钥的协商与交换,而使用数据密钥对称加密算法进行数据流的加解密保护。...基于RSA的密钥交换简单的密钥交换过程基于RSA进行密钥交换,基于非对称密钥的两个基本特性:使用公钥加密、私钥解密,且此过程无法逆向公钥是对外公开的,私钥是私密不公开的客户端与服务端在简单的密钥交换场景中

    6.8K11117

    5G安全:5G-AKA链接攻击及对策

    图1 5G-AKA整体流程 在初始化阶段,UE使用HN的公钥和ECIES加密算法对SUPI进行加密得到SUCI并发给HN。...,则返回Sync_Failure和AUTS消息,UE使用AUTS消息与HN重新同步;最后,当所有检查都通过时,UE计算响应值RES和锚密钥Kseaf,并将响应值RES发送到HN。...UE收到(RAND,AUTN)后,首先将AUTN拆分成CONC和MAC,再通过共享密钥k和RAND计算AK,进而与CONC进行异或操作得到SQNHN,最后计算出MAC值与收到的MAC值进行对比。...其核心思想是重用由ECIES建立的对称密钥作为“会话密钥”来完成对身份验证挑战(RAND)的加密和解密。UE在将RAND作为身份验证的输入之前使用密钥进行解密,避免了修改命令。...第二,HN所生成的HXRES更改为由加密后的RAND计算生成。 第三,UE需要使用KUE对接收的RAND进行解密之后才能够进行身份验证。

    1.8K30

    Python在网络安全与密码学领域的技术实践指南

    使用PyCryptodome库进行AES加密AES(Advanced Encryption Standard)是一种常用的对称加密算法,PyCryptodome库提供了对AES的支持。...使用hashlib库进行哈希函数计算哈希函数是密码学中的重要概念,常用于密码存储、数据完整性校验等场景。Python的hashlib库提供了多种哈希函数的实现。...使用PyCryptodome库进行RSA加密RSA算法是一种非对称加密算法,PyCryptodome库提供了对RSA的支持。...使用PyCryptodome库进行数字签名数字签名是一种用于验证数据完整性和认证发送方身份的技术。PyCryptodome库提供了对数字签名的支持。...我们从基础的加密算法和哈希函数开始,讨论了如何使用PyCryptodome库进行AES加密、RSA加密等操作,以及如何利用hashlib库进行哈希函数计算

    20430

    计算机网络】网络安全 : 公钥密码体质 ( 公钥 - 加密密钥 | 私钥 - 解密密钥 | 与对称密钥体质对比 | 特点 | 数字签名引入 )

    公钥密码体质 ( 公开密钥密码体质 ) : ① 本质 :加密密钥 与 解密密钥 是不同的密钥 ; ② 前提 : 已知 加密密钥 , 无法计算出 解密密钥 ; ③ 公钥密码体质 产生原因 : 常规密钥密码体质...: 私钥 , 是保密的 ; ③ 算法 : 加密算法 和 解密算法 都是 公开 的 ; ④ 密钥计算 : 公钥 决定 私钥 , 但是 根据 公钥 无法计算出 私钥 ; 三、公钥密码体质 与 对称密钥体质对比...---- 公钥密码体质 与 对称密码体质对比 : ① 安全性 : 密码的安全性取决于 密钥长度 , 以及 破解密文的计算量 ; 二者安全性相同 ; ② 开销 : 公钥加密 其开销 大于 对称加密 ,...传统的对称加密算法 还是需要继续使用 ; ③ 密钥分配协议 : 公钥密码体质 需要 密钥分配协议 , 其密钥分配过程 , 不比传统加密算法简单 ; ④ 通道性质 : 一对一 / 多对一 , 双向 / 单向...; 对称密钥体质 : 只能实现 信道上 一对一的双向保密通信 , 发送方和接收方 使用相同的密钥加密 和 解密 ; 公钥密码体质 : 可以实现 信道上 多对一的单向保密通道 ; 四、公钥密码体质算法特点

    67000

    【踩坑】 修复报错 No module named ‘Crypto‘

    RSA加密算法是一种非对称加密算法。RSA 是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。...非对称加密算法也就是加密和解密用不同的密钥使用一对秘钥对来进行加密和解密,使用公钥来加密信息,然后使用私钥来解密。当然了,加密解密的过程是非常复杂的,关于加密解密的原理可以搜索一下相关的文章。...AES是高级加密标准(Advanced Encryption Standard)的缩写,AES 是最常见的对称加密算法。 对称加密算法也就是加密和解密用相同的密钥,同一个秘钥即用来加密,也用来解密。...这个直接使用pip安装Crypto是没有用的,网上说的装pycrypto实际上也没有用。...真正需要这样装: pip uninstall crypto pip uninstall pycrypto pip install pycryptodome 再运行就可以用了。

    29600

    PHP强大加密库 PHP-Encryption

    项目地址:https://github.com/defuse/php-encryption 技术摘要 对称加密与非对称加密的结合 php-encryption 库支持 AES-256-GCM 和 AES...-256-CBC 两种对称加密算法,并采用了 HKDF (HMAC-based Extract-and-Expand Key Derivation Function) 进行密钥扩展,确保了密钥的安全性。...此外,库还提供了 XChaCha20-Poly1305 非对称加密算法,用于更高效且安全的密钥交换。...SecureRandom 生成随机数 对于加密过程中的随机数生成,php-encryption 使用的是 random_bytes 函数或其兼容版本,它基于硬件熵源,以确保产生的随机数值足够随机和不可预测...加密过程封装 库内封装了加密、解密、密钥生成等操作,使得开发者无需直接处理复杂的加密函数,只需调用简单的API即可完成数据保护。

    19210

    我做了一个App,如何让别人限时使用

    但如果加密的话,就必须把解密算法放到软件里面,一旦用户对程序进行初步的反编译,就能拿到解密算法或者对称加密的密钥。 因此,我们只能使用对称加密。而非对称加密里面,通过公钥加密,使用私钥解密。...各个语言都有非对称加密相关的第三方库。我们用Python中的PyCryptodome来进行演示。...首先,我们在macOS下面,生成一对公钥和私钥: ssh-keygen -t rsa 根据提示输入密钥的储存路径就可以了,如下图所示: 在当前文件夹,生成了私钥sign和公钥sign.pub。...接下来,使用pip安装PyCryptodome: pip install pycryptodome 接下来,导入公钥和私钥: >>> from Crypto.PublicKey import RSA...f.read() ... >>> private_key = RSA.import_key(private) >>> public_key = RSA.import_key(public) 由于我们之前生成密钥使用的是

    1.6K10

    Key attestation的几个关键点!

    Key attestation就是密钥认证,之前介绍过: Key attestation-Google的密钥认证 下图是Google Android密钥认证的架构图。...● 密钥将被部署到设备上,每10K设备用一个密钥。 ● 谷歌将创建密钥并对它们进行验证。 这个过程是与Widevine密钥分配过程非常类似(将可能使用相同的交付方法)。...密钥撤回:密钥撤销将通过CRL和OSCP被取消 ● 安全密钥注入只能在工厂完成,所以设备被吊销的密钥将永久不受信任。 ● 密钥被注入到设备批次中,因此撤销至少影响整个批处理。...其他的keystore安全措施: ● More elliptic curve functionality:ECIES ECDH ● Exportable symmetric keys ● Fingerprint-bound...Hardware-backed keystore will be MANDATORY in a future release. ● All algorithms (RSA, AES, ECDSA, ECDH, ECIES

    6K70

    PHP的Hash信息摘要扩展框架

    PHP的Hash信息摘要扩展框架 今天我们主要学习的是 PHP 中一些 Hash 散列加密相关的扩展函数的使用,而不是 Hash 算法,这种加密其实也只是一种更复杂一些的密钥算法,与 Hash 算法类似的是...hmac 相关的函数是 PHP 的 Hash 算法中的另一种形式,它是一个需要密钥的算法,也就是 hash_hmac() 的第三个参数。只有输入内容相同并且密钥也相同的内容返回的结果才会是一样的。...也就是说,这个函数可以用于对称加密的信息传递验证 token 来使用。比如两个系统之间的接口互通如果需要一个固定 token 的,就可以使用这个函数来实现。...hash_hkdf('sha256', '123456', 32, 'aes-256-encryption', random_bytes(2)); $hkdf2 = hash_hkdf('sha256...) 结束句柄操作进行 Hash 计算并返回结果值。

    87630
    领券