LockBox3生成相同的RSA密钥对

时间:2015-10-25 14:53:52

标签: delphi cryptography key rsa lockbox-3

我最近决定遇到LockBox3加密组件集,并按照以下简单文档介绍如何使用以下链接生成RSA密钥对:

http://lockbox.seanbdurkin.id.au/Generate+an+RSA+key

(官方文件)

当我应用这个过程时,我能够生成公钥和私钥并导出到文件。

但是当我决定使用相同的代码生成新的密钥对时,它仍然是相同的公钥和私钥(完全相同)

通常不应该是这种情况,我们应该能够生成无限制的不同密钥对,以防私钥因某些原因泄露。

是否还有其他步骤来生成全新的密钥对,或者这是一个错误?

我使用Delphi XE6并运行Lockbox 3组件(最新源自SourceForge)

提前致谢

2 个答案:

答案 0 :(得分:1)

在生成之前随机化您的种子。为获得最佳效果,请勿使用内置的随机化程序。

答案 1 :(得分:0)

uTPLb_Random方法中,TRandomStream.Randomize单元中出现键入错误。现在,它已修复(请参见uTPLb_Random.pas on GitHub)。

procedure TRandomStream.Randomize();
{$IFDEF SMWINDOWS} //Should be MSWINDOWS
var
  hProv: THandle;
  dwProvType, dwFlags: DWORD;
  Provider1: string;
  hasOpenHandle: boolean;
{$ENDIF}
begin
{$IFDEF SMWINDOWS} //Should be MSWINDOWS
  Provider1 := Provider;
  dwProvType := PROV_RSA_FULL;
  dwFlags := CRYPT_SILENT;
  hasOpenHandle := CryptAcquireContext(hProv, nil, PChar(Provider), dwProvType, dwFlags);
  try
    if (not hasOpenHandle) or (not CryptGenRandom(hProv, SizeOf(FValue), @FValue)) then
  FValue := TimeStampClock();
  finally
    if hasOpenHandle then
      CryptReleaseContext(hProv, 0);
  end;
  Crunch();
{$ENDIF}
end;

校正后,每次都会生成不同的密钥。