【问题标题】:How can I increase the effectiveness of encryption for storing application settings?如何提高加密存储应用程序设置的有效性?
【发布时间】:2010-12-05 00:36:24
【问题描述】:

我目前正在使用 RC4 算法来存储应用程序设置,当我观察输出时,它看起来很容易解码。以相同字母开头的字符串的输出看起来是相同的。

短字符串导致短输出,长字符串产生更长的输出。

但是我正在寻找可以为短字符串产生更长输出的东西。

是否有另一种算法可以创建更多“加扰”输出,即使是短字符串?

我还想为输入添加一些数据后缀或前缀,这些数据在解码后可以轻松识别并去除,以在输出上创建更多随机性。

我已经使用下面显示的 Rijndael 创建了新代码,但它仍然存在同样缺乏输出变化的问题。我怀疑在输出、IV、块填充等方面创建更多变化需要一些额外的参数。

unit testform;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, DCPrijndael, DCPsha1;

type

  { TForm1 }

  TForm1 = class(TForm)
    edtKeyString: TEdit;
    edtInputText: TEdit;
    edtEncryptedText: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure edtInputTextChange(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  Form1: TForm1; 

implementation

{ TForm1 }

procedure TForm1.edtInputTextChange(Sender: TObject);
var
  Cipher: TDCP_rijndael;
begin
  Cipher:= TDCP_rijndael.Create(Self);
  Cipher.InitStr(edtKeyString.Text,TDCP_sha1);
  edtEncryptedText.Text := Cipher.EncryptString(edtInputText.Text);
  Cipher.Burn;
  Cipher.Free;
end;

initialization
  {$I testform.lrs}

end.

【问题讨论】:

  • 如何生成用于加密数据的密钥?
  • 对于异或模式的流密码,您应该只使用密钥一次。它与一次性便笺具有非常相似的属性。在适当的模式下使用块密码。如果您知道自己在做什么,则应该只使用流密码,因为它们比块密码更容易出错。

标签: encryption application-settings


【解决方案1】:

RC4 是流密码。您可能想查看像 AES 这样的分组密码。不要忘记使用填充,例如PKCS7。

编辑:添加后缀/前缀数据以“创建更多随机性”。加密算法将为您执行此操作(除非它是一个损坏的算法,在这种情况下选择一个不同的算法)。充其量这是没有意义的。在最坏的情况下,这是添加一个“婴儿床”,这将使某人更容易攻击您的加密。

【讨论】:

  • 需要的是随机 IV。这对 RC4 也有帮助,尽管在 RC4 中如何使用 salt/IV 并不明显。
  • 使用分组密码回答“会为短字符串产生更长输出的东西”问题。如果您处于使用分组密码的 CBC 模式,您还需要一个 IV。流密码根本不使用 IV。
  • 我想另一种解决方案是继续使用 RC4,但将每条数据填充到某个固定大小。
  • 随机前缀的行为应该与 CBC 模式下带有块密码的随机 IV 非常相似。我看不出它会如何削弱这个计划。我也会添加某种 MAC。
  • @CodeInChaos:关键是它不会向输出“添加更多随机性”——无论如何,好的加密看起来都是随机的。 CBC 模式下的 IV 是为了防止相同的明文导致相同的密文,但使用流密码,您无论如何都不会遇到这个问题(只要您只使用每个密钥一次)。最主要的是你不应该不必要地增加复杂性。 MAC 是个好主意。
猜你喜欢
  • 2012-11-21
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多