使用 Fortuna PRNG 在计数器模式下使用 AES 进行随机访问加密:

2024-03-03

我正在构建基于 AES 的文件加密,该加密必须能够在随机访问模式下工作(访问文件的任何部分)。例如,可以在 Counter 中使用 AES,但众所周知,我们需要一个不会使用两次的唯一序列。 在这种情况下,可以使用简化的 Fortuna PRNG(使用随机选择的特定于特定文件的唯一密钥来加密计数器)吗?这种方法有弱点吗?

所以加密/解密可以是这样的

Offset 处的块加密:

rndsubseq = AESEnc(Offset, FileUniqueKey)
xoredplaintext = plaintext xor rndsubseq
ciphertext = AESEnc(xoredplaintext, PasswordBasedKey)

解密 Offset 处的块:

rndsubseq = AESEnc(Offset, FileUniqueKey)
xoredplaintext = AESDec(ciphertext, PasswordBasedKey)
plaintext = xoredplaintext xor rndsubseq

一项观察。我自己想到了《福尔图娜》中使用的想法,后来肯定发现它已经被发明了。但正如我到处读到的那样,它的关键点是安全性,但还有另一个优点:可以说,它是一个很棒的随机访问伪随机数生成器(以简化形式)。因此,PRNG 不仅会产生非常好的序列(我用 Ent 和 Die Hard 对其进行了测试),而且如果您知道步骤号,还允许访问任何子序列。那么,在安全应用程序中使用 Fortuna 作为“随机访问”PRNG 通常可以吗?

EDIT:

换句话说,我建议使用 Fortuna PRNG 作为调整,形成具有随机访问能力的可调整 AES 密码。我阅读了 Liskov、Rivest 和 Wagner 的著作,但无法理解操作模式下的密码和可调整密码之间的主要区别是什么。他们说,他们建议将这种方法从高层引入密码本身,但例如在我的例子中,通过调整对纯文本进行异或,这是否是一种调整?


我想您可能想了解一下“可调整的分组密码”是如何工作的,并看看如何解决光盘加密的问题:磁盘加密理论 http://en.wikipedia.org/wiki/Disk_encryption_theory。加密整个磁盘与您的问题类似:每个扇区的加密必须独立完成(您希望对不同偏移量的数据进行独立加密),但整个磁盘必须是安全的。这方面已经做了很多工作。维基百科似乎给出了很好的概述。

编辑添加: 重新编辑:是的,您正在尝试通过将调整与明文进行异或,用 AES 制作可调整的分组密码。更具体地说,您有 Enc(T,K,M) = AES (K, f(T) xor M),其中 AES(K,...) 表示使用密钥 K 进行 AES 加密,f(T) 是以下函数调整(在你的情况下我猜是福尔图娜)。我简要浏览了你提到的论文,据我所知,可以证明这种方法确实有效not产生安全的可调整分组密码。 这个想法(基于 Liskov、Rivest、Wagner 论文第 2 节的定义)如下。我们可以访问加密预言机或随机排列,并且我们想知道我们正在与哪一个进行交互。我们可以设置调整T和明文M,然后我们得到相应的密文,但我们不知道使用的密钥。以下是如何确定我们是否使用 AES(K, f(T) xor M) 结构。 选取任意两个不同的值 T、T',计算 f(T)、f(T')。选择任意消息 M,然后将第二条消息计算为 M' = M xor f(T) xor f(T')。现在要求加密预言机使用调整 T 加密 M,并使用调整 T' 加密 M'。如果我们处理所考虑的构造,输出将是相同的。如果我们处理随机排列,输出几乎肯定会不同(概率为 1-2^-128)。这是因为 AES 加密的两个输入相同,因此密文也相同。当我们使用随机排列时,情况就不会如此,因为两个输出相同的概率是 2^-128。最重要的是,对输入进行异或调整可能不是一种安全的方法。

该论文给出了一些可以证明是安全结构的例子。最简单的似乎是 Enc(T,K,M) = AES(K, T xor AES(K, M))。每个块需要两次加密,但它们证明了这种结构的安全性。他们还提到了更快的变体,但它们需要额外的原语(几乎异或通用函数系列)。

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

使用 Fortuna PRNG 在计数器模式下使用 AES 进行随机访问加密: 的相关文章

  • 如何编写凯撒密码 Python

    我不知道如何开始编写程序 input input Input the text you would like encrypted def cipher text letter code for i in input number code
  • RSA 加密-解密:BadPaddingException:数据必须以零开头

    对于一个被问了很多次的问题 我很抱歉向您询问您的技能 我有一个关于 RSA 加密的问题 我已经检查过有关此问题的其他主题 但没有找到任何有用的答案 我希望你能帮助我 我想读取一个文件 加密其内容 然后解密它并将这些解密的字节放入一个新文件中
  • (Java) 在 Mac OS X 上以编程方式访问“系统根目录”下的 SSL 证书

    我正在编写一个 Java 应用程序 它可以通过远程 Https 站点进行 REST Api 调用 远程站点由受信任的证书签名 它在 Windows 上运行良好 但由于 SSL 证书问题 在 OS X 上运行时遇到问题 我做了一些挖掘 发现原
  • openssl_crypt 中初始化向量的使用

    我看了一下this https stackoverflow com questions 1391132 two way encryption in php问题 并想为自己做 当我运行这段代码时 直接取自这个答案 https stackove
  • Rfc2898DeriveBytes 与密码的 Sha2 哈希生成

    我最近知道使用 SHA256 为加盐密码生成密码哈希 在阅读了一些有关加盐密码和安全性的内容后 我看到rfc2898derivebytes and passwordderivebytes NET 中的类 使用有什么好处吗rfc2898der
  • 未捕获的安全错误:阻止了具有原点的框架...访问具有原点的框架

    我已经为 SAP 解决方案 无论什么 制作了一个组件 该组件通过 iframe 嵌入到报告中 在 SAP 平台 BO 上部署报告后 我收到此错误 在 Chrome 上 但在 IE 或 FF 上也不起作用 Uncaught SecurityE
  • php字符串是值类型吗?

    为什么php的string是值类型 每次将参数传递给函数时 每次进行赋值时 每次连接都会导致字符串被复制时 它都会被复制到各处 我的 NET 经验告诉我 它似乎效率低下 迫使我几乎在任何地方都使用引用 考虑以下替代方案 替代方案1 This
  • Cloud Firestore 安全规则使用的语言名称是什么?

    我想知道用于 Cloud Firestore 安全规则的语法名称 如下所述https firebase google com docs firestore security get started authuser 0 https fire
  • Java - 从配置文件加密/解密用户名和密码

    我们正忙于为客户开发 Java Web 服务 有两种可能的选择 将加密的用户名 密码存储在Web服务客户端上 从配置中读取 文件在客户端 解密并发送 将加密的用户名 密码存储在 Web 服务器上 从配置中读取 Web 服务器上的文件 解密并
  • 使用 SSL 设置 .Net IBM.XMS 客户端

    我必须创建一个客户端来侦听队列上的消息 正在使用 SSL 我正在 dot net 中进行开发 我浏览了数百页的文档和论坛 找到了一些清晰简洁的内容 但看起来事实并非如此 我有一个 jks 并且我能够 telnet 到正在发布队列的服务器 下
  • 用于防止滥用的 Servlet 过滤器? (DoS、垃圾邮件等)

    我正在寻找一个 Servlet 过滤器库 它可以帮助我保护我们的 Web 服务免受未经授权的使用和 DDoS 攻击 我们的网络服务有 授权客户 因此理想情况下 过滤器将帮助检测未经授权或行为不当的客户 或检测使用同一帐户的多个人 此外 我们
  • 如何将pgp私钥传输到另一台计算机? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 I read 本文 http www robertsosinski com 2008 02 18 working with pgp and mac o
  • 使用 AesManaged“填充无效且无法删除”

    我正在尝试使用 AesManaged 进行简单的加密 解密 但在尝试关闭解密流时不断出现异常 这里的字符串被正确加密和解 密 然后在 Console WriteLine 打印正确的字符串后 我收到 CryptographicExceptio
  • 加密 mongodb 中的密码字段

    我有以下代码 它插入userName and password进入数据库 但密码以纯文本格式存储 我的意思是 当我查看数据库时 我可以看到插入的密码 我想存储password in encrypted format MongoClient
  • 如何将 pem 公钥转换为 openssl RSA* 结构

    假设我必须像这样公开 pem 密钥 BEGIN PUBLIC KEY MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7vbqajDw4o6gJy8UtmIbkcpnk O3Kwc4qsEnSZp TR fQi
  • AES 输出是否小于输入?

    我想加密一个字符串并将其嵌入到 URL 中 因此我想确保加密的输出不大于输入 AES 是可行的方法吗 不可能创建任何始终会创建比输入更小的输出的算法 但可以将任何输出反转回输入 如果您允许 不大于输入 那么基本上您只是在谈论同构算法alwa
  • 如何通过 PDO 使用密码哈希来使我的代码更安全? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的代码实际上可以工作 但它一点也不安全 我不想使用 MD5 因为它不是那么安全 我一直在查找密码哈希 但我不确定如何将其合并到我的代
  • 存储外部站点(不使用 OAuth)的用户凭据的智能方法是什么?

    我意识到 一般来说 您不应该直接存储用户凭据 即以纯文本形式 相反 最好存储它们的某种加密形式 但是 假设我创建了一个与其他第三方网站交互的网站 假设这个第 3 方站点提供了一个 API 需要用户的凭据 使用该站点 进行身份验证 如果我的目
  • BadPaddingException:无效的密文

    我需要一些帮助 因为这是我第一次编写加密代码 加密代码似乎工作正常 但解密会引发错误 我得到的错误是 de flexiprovider api exceptions BadPaddingException 无效的密文 in the 解密函数
  • 受信任的 1.5 小程序可以执行系统命令吗?

    如果是的话 这个能力有什么限制吗 具体来说 我需要以 Mac OSX 为目标 我以前用过这个在 Windows 系统上启动东西 但从未在 Mac 上尝试过 public void launchScript String args Strin

随机推荐