2012-03-22 8 views
1

Lockbox 2 암호문을 LockBox 3 암호문으로 변환 할 수있는 방법이 있습니까? Delphi 2007 기반의 애플리케이션을 Delphi xe2로 마이그레이션 할 때 Delphi 2007에서 Lockbox 2 RSA 암호화 알고리즘을 사용했으며 Delphi xe2에서 lockbox 3을 사용하여 유니 코드 데이터를 지원하려고합니다. Xe2가 유니 코드 데이터를 지원할 때 양자에서 생성 된 암호 텍스트가 다르므로 문제가 발생합니다. 그래서 우리는 Lockbox 2에 의해 생성 된 암호 텍스트를 어떻게 든 LockBox 3으로 변환하려고합니다.Lockbox2 암호문을 Lockbox3 암호문으로 변환

+0

암호화 된 암호 또는 다른 데이터가 저장되어 있다고 가정합니다. 당신은 개인 키를 가지고 있으며 해독과 재 암호화가 가능하며,이 질문을하는 이유는 무엇입니까? 아니면 개인 키가 없으며 암호 해시이며 일반 텍스트는 복구 할 수 없습니다 . 어느 쪽이든, 당신은 이미 그 해답을 알고 있습니다. 그럼 여기서 왜 물어 봐야 하죠? –

답변

2

정의에 의한 암호 텍스트를 인식 할 수 없기 때문에 기본 텍스트 데이터가 Ansi 또는 Unicode인지 쉽게 알 수 없으므로 관련 속성을 관리해야 할 수 있습니다.

분명히 응용 프로그램의 레이아웃과이 데이터가 저장되는 위치와 클라이언트가 업그레이드 될 방법에 따라 다르지만 저장된 암호문과 관련된 일종의 새 버전 플래그가있을 수 있습니다. 로컬 테이블에있는 경우 PlainTextVersion에 대한 새 열을 추가하고 버전을 유니 코드 일반 텍스트에서 암호가 저장되었음을 나타내는 플래그로 설정합니다. 암호문을 읽을 때이 새로운 필드가 Unicdoe 플래그와 일치하지 않으면 유니 코드 일반 텍스트를 사용하여 암호 해독 및 암호화를 통해 암호문을 업그레이드 한 다음 암호문을 다시 저장하고 새 플래그를 설정할 수 있습니다 (또는 단순히 암호문을 뺍니다). 버전을 업그레이드해야합니다.

가능하면 현재의 모든 암호문을 한 번에 자동 업그레이드하십시오.

0

변환하려면 가장 쉬운 방법은 Lockbox 2를 사용하여 암호 텍스트의 암호를 해독하고 Lockbox 3을 사용하여 다시 암호화하는 것입니다.

이유는 내가 알 수있는 것부터, Lockbox 2는 RSA block type 2 패딩의 구현을 채웠다. 즉, Lockbox 2의 RSA 암호화가 다른 사람의 RSA 암호 해독과 호환되지 않는다는 것을 의미한다.

얽힌 2의 RSA 암호화 패드 밖으로 다음 잘못 (브레이크 포인트를 배치하고 biBlock.Fi.IntBuf.pBuf에서 메모리 검증으로) 메시지 :

message-bytes 0x00 random-padding-bytes 0x02 0x00

예를 '테스트'에 패딩되었다

$01C883AC 74 65 73 74 00 D4 50 50 test..PP 
$01C883B4 A7 BO E5 51 7A 4C C2 BC ...QzL.. 
$01C883BC 8C B8 69 8A 97 DF AA 1D ..I..... 
$01C883C4 78 67 1E OE 8B AB 02 00 xg...... 

하지만 (예를 들어이 worked example보고)에게 패딩해야합니다

0x00 0x02 random-padding-bytes 0x00 message-bytes

얽힌 2는 역에서 바이트 (저장되지 않는다 그렇지 않으면 "test"메시지도 반대로 될 것입니다) 또는 32 비트 리틀 엔디안을 반대로합니다 (그렇지 않으면 02 00도 역시 스왑 될 것입니다). 모든 것은 암호화와 암호 해독에 Lockbox 2를 사용하는 한 오래 작동합니다.

또한 Lockbox 2가 공개 지수 e를 생성하기 위해 Lockbox 2가 e.RandomSimplePrime()을 호출하지만 짝수, 즉 RandomSimplePrime()에서 괄목할만한 버그를 생성하는 또 다른 버그를 발견 했습니까? Lockbox 2.07 만 보았습니다. Lockbox 3은 완전히 다시 작성되었으므로 이러한 버그가 없습니다.

관련 문제