2011-10-28 3 views
2

지금까지 RSA로 암호화 된 데이터가 있으면이 데이터는 일반적으로 대부분의 플랫폼 (.net, java, pc, unix ..)간에 쉽게 교환 될 수 있다고 생각했습니다. 사용 된 알고리즘.RSA로 인코딩 된 데이터를 교환 할 수 있습니까?

다른 questions에 대한 조사를 통해 나는 이제 혼란스러워합니다. 나는 MS 구현 차이점까지도 발견했다 (일부 공급자는 결과 바이트 배열을 반대로). 게다가 패딩은 표준화를 따르지 않는 것으로 보인다.

RSA 인코딩 데이터가 비교적 간단하게 교환 할 수있는 경우 (일부 분명한 함정이있는 경우) 또는 이것이 두통 일 경우 크로스 플랫폼 암호화 경험이있는 사람이 성명을 발표 할 수 있습니까?

+1

당신이 암호화되지 않은 형태로 이식 할 수 있습니까? 평범한 텍스트 파일조차도 인코딩, CR/LF 규칙, 탭 처리 등으로 인해 두통을 줄 수 있습니다. –

+0

@larsmans : 질문은 이해를위한 질문입니다. 암호화되지 않은 데이터로 인해 잠재적 인 플랫폼 문제가 발생한다는 것이 확실합니다. 그러나 지금까지는 RSA.Decrypt (b)가 다른 시스템에서 수행 된 경우 적어도 RSA.Encrypt (a) = b 및 RSA.Decrypt (b) = a라고 생각했습니다. – HCL

+0

알았어 HCL, 그냥 확인. 나는 그러한 멍청한 질문에 답하기 전에 9500 이상의 담당자를 찾아야한다고 생각합니다. 미안합니다. –

답변

3

RSA 암호화는 일반적으로 자체적으로 사용되지 않지만, in combination with a symmetric encryption algorithm입니다.

  • 양측은 RSA에 대해 동일한 패딩 방식 (예를 들어, 원래 PKCS#1 버전 1.5에 정의 된 하나, 또는 OAEP)를 사용 : 그래서, 상호 운용 될 수 있는지 확인하기 위해, 당신은 있는지 확인해야합니다. (패딩이 결정적이어야한다는 것을 의미하는 것은 아니며, 해독기가 패딩 된 비트와 원래 메시지 였음을 알고 있다는 것만 알았습니다.
  • 양쪽에 메시지의 형식이 동일합니다 (예 : PKCS#7 or its successors의 형식).
  • 양측은 동일한 대칭 알고리즘 (예 : AES-128), 작동 모드 (예 : CBC) 및 블록 암호 채우기 체계 (예 : PKCS # 5 패딩)를 사용합니다.
  • 암호화 당사자는 해독 당사자가 사용하는 개인 키에 해당하는 공개 키를 사용해야합니다.
+2

사실, 비대칭 암호화의 경우 패딩을 결정적이어서는 안됩니다. 그렇지 않으면 일반 텍스트를 철저히 검색 할 수 있습니다. RSA를 사용하여 동일한 데이터를 두 번 암호화하면 두 개의 별개의 바이트 문자열이 생성됩니다 (그러나 암호 해독 후 패딩을 분명히 제거 할 수 있음). –

2

질문에 대한 간단한 대답은 아니오입니다. 암호화 알고리즘 자체는 상호 운용성을 보장하기 위해 구현간에 바이트를 저장하거나 전송하는 방법을 지정하지 않습니다. 이를 위해서는 비트 수준까지 이러한 지침을 제공하는 표준 형식이나 프로토콜을 사용해야합니다. 예를 들어, Paulo 대답에서 그는 PKCS # 7과 PKCS # 1에 대해 이야기합니다. 이것들은 ASN.1의 DER 인코딩 규칙에 의존합니다.이 규칙은 RSA의 큰 ​​정수 조각을 명확한 바이트 시퀀스로 변환하고 다시 되돌려 보내는 방법을 정확하게 지정합니다.

관련 문제