当前位置: 首页 > 知识库问答 >
问题:

OpenSSL与GPG用于加密异地备份?[关闭]

仉昱
2023-03-14

想要改进这个问题吗?更新问题,以便通过编辑这篇文章用事实和引用来回答。

在将档案推送到异地备份位置之前,可以选择使用GPG和OpenSSL进行本地加密,每个解决方案的优点和缺点是什么?

背景:我目前管理基于Ubuntu 14.04.1的服务器基础架构,并在所有当前补丁可用时应用它们。

所有这些系统都是无头的,使用经过审查的预设和自动化工具自动构建,并通过基于英特尔的统一硬件上的KVM在虚拟机中运行。

我们偏爱 Ruby,但更偏爱“正确做事”。由于两者兼而有之,我们选择了“备份”gem作为创建我们想要保留的数据的加密档案的方法,因为它将为使用Vagrant的开发人员创建与生产中相同的加密档案,无论它通过何种机制传输。

所有软件和配置都通过Puppet进行管理,因此这两个决定都不会对“用户体验”或便利性产生任何影响。任一选项都将创建相关脚本来管理、验证或从创建的任何备份还原。

鉴于此,当用于此目的时,任何一个加密选项是否比另一个具有任何优势?

共有1个答案

时旭东
2023-03-14

我会选择GPG进行文件加密,它有数十年的安全测试加密,并且很容易拥有多个“收件人”(备份密钥?)或带有公钥的签名

使用GPG,所有简单的错误都被避免/修复了,它为实际加密选择了一个更长的“随机”密钥,并进行了大量的“轮次”以使其非常安全。

OpenSSL应该能够做所有相同的事情(它从1998年就开始了,但如果版本号意味着什么,它在2010年达到了版本1),但很容易犯错误,这可能会大大降低安全性。这篇关于security.stackeexchange的文章。com(从2013年1月开始)和另一个159K信誉用户的openssl-enc命令可能会留下一些不需要的东西:

OpenSSL使用的加密格式是非标准的:它是“OpenSSL所做的”,如果所有版本的OpenSSL都倾向于相互同意,那么除了OpenSSL源代码之外,仍然没有描述这种格式的参考文档。标头格式相当简单:

魔术值(8字节):字节53 61 6c 74 65 64 5f 5f盐值(8字节)

因此,一个固定的16字节标头,从字符串“Salted__”的ASCII编码开始,然后是盐本身。仅此而已!没有加密算法的迹象;你应该自己跟踪它。

密码和盐转换为密钥和IV的过程没有文档记录,但查看源代码可以发现,它调用了OpenSSL特定的EVP_BytesToKey()函数,该函数使用了一个带有一些重复哈希的自定义密钥派生函数。这是一个非标准且未经充分审查的构造(!)它依赖于信誉可疑的MD5哈希函数(!!);可以在命令行上使用未记录的-md标志(!!!)更改该函数;“迭代计数”由enc命令设置为1,不能更改(!!!)。这意味着密钥的前16个字节将等于MD5(密码||salt),仅此而已。

这太弱了!任何知道如何在PC上编写代码的人都可以尝试破解这样的方案,并且每秒可以“尝试”数千万个潜在密码(使用GPU可以实现数亿个)。如果您使用“openssl-enc”,请确保您的密码具有非常高的熵!(即高于通常推荐值;目标至少为80位)。或者,最好不要使用它;相反,选择更健壮的(GnuPG在对密码进行对称加密时,使用了更强的KDF,并多次迭代底层哈希函数)。

man-enc甚至在“BUGS”下有这个:

应该有一个选项允许包含迭代计数。

 类似资料:
  • 我尝试在服务器上进行gpg加密/解密,对于加密,我使用以下命令行: 我想要找到原因:同一个用户有2个不同的密钥和1个秘密密钥。但现在又出现了一个问题:我删除了错误的键,并再次进行相同的测试。 解密后的答案是: 您需要一个密码短语来解锁用户的密钥:“Droli Mail_Adress”2048位RSA密钥,ID 6D2F1BE9,创建2017-07-19(主密钥ID 09C41BAC) 没有关于gp

  • 一个安全和可靠的服务器是与定期运行备份有密切的关系,因为由攻击、硬体故障、人为错误、电力中断等引致的错误有可能随时发生。 Navicat 为用户提供一个内置备份和还原工具用于备份或还原 MySQL、PostgreSQL、SQLite 和 MariaDB 数据库对象。对于 Oracle、SQL Server 和 MongoDB,用户可以使用以下的功能。 Oracle 数据泵 SQL Server 备

  • 一个安全和可靠的服务器是与定期运行备份有密切的关系,因为由攻击、硬体故障、人为错误、电力中断等引致的错误有可能随时发生。 Navicat 为用户提供一个内置备份和还原工具用于备份或还原 MySQL、PostgreSQL、SQLite 和 MariaDB 数据库对象。对于 Oracle、SQL Server 和 MongoDB,用户可以使用以下的功能。 Oracle 数据泵 SQL Server 备

  • 一个安全和可靠的服务器是与定期运行备份有密切的关系,因为由攻击、硬体故障、人为错误、电力中断等引致的错误有可能随时发生。 Navicat 为用户提供一个内置备份和还原工具用于备份或还原 MySQL、PostgreSQL、SQLite 和 MariaDB 数据库对象。对于 Oracle、SQL Server 和 MongoDB,用户可以使用以下的功能。 Oracle 数据泵 SQL Server 备

  • 我正在使用以下函数通过Qt中的OpenSSL库加密我的数据: “源”在“123456789012345678901234567890123456789012ABC”中。 “密码”为“1HA!DH==SJAH48S8AK!?SKIITFI120XX”。 所以...如果我正确的话,那么EVP_BytesToKey()应该从密码中生成一个密钥,并提供数据以在后面解密字符串。 对base64编码的密钥是:

  • 我正在尝试使用带有相同密钥和 iv 的 AES 加密相同的文本。我使用 bash 方法和 ruby 的 openssl stdlib,并对加密结果进行 b64 编码。但结果不同!我试图理解为什么。这是我所做的: 红宝石(1.9.3-p448) 砰砰�� -iv参数设置为上面计算的iv_hex值。 ========================================= 我仔细检查了静脉注

  • 我不是一个密码专家,特别是由于OpenSSL有很多缺少的文档,我不确定如何解决这个问题。 我有一个期望接收加密消息的外部系统。提供的唯一示例以这种方式使用OpenSSL: 其中,文件在一行中包含此字符串: 我发现了另一个问题,我能够使用以下代码进行加密: 我不明白的是,我应该如何生成与OpenSSL类似的输出(encryptedData)。我有salt、iv和密文,OpenSSL输出Base64编

  • 问题内容: 我们遇到了一种奇怪的情况,尽管我们在Java中使用的加密方法在配置上看起来完全相同,但它们生成的输出却与openssl不同。 使用相同的键和IV,文本“快速的棕狐狸跳过了懒狗!” 加密为base64的字符串… openssl: Java: 这是我们的openssl电话… 这是我们的Java … oopenssl输出 Java输出 我们缺少明显的东西吗?还是存在一些隐藏的复杂性? 问题答