2012-09-05 6 views
2

다른 플랫폼을 다룰 때 암호화 및 암호 해독 작업을 수행하는 동안 가장 바람직한 접근 방법은 무엇일까요?다른 플랫폼에 관심이있을 때 암호화와 관련된 모범 사례는 무엇입니까?

필자가 알고있는 것처럼, 그러한 시나리오로 작업하기를 원할 때마다 그는 특정 사항을 고려해야합니다.

  1. 암호화/복호화 알고리즘
  2. 패딩 패턴
  3. 양측의
  4. 문자 인코딩
  5. 암호 키와 블록 크기 확실히

, 말처럼, 암호화/복호화 알고리즘 하나에 원하는 사용 양면에서 동일해야합니다 그리고 나는 나머지 세 가지에 대해 같은 것을 말할 수 있다고 생각합니다.

다음 시나리오 나 유사한 시나리오에서 작업하는 동안 따라야 할 단계를 제안하십시오.

  1. 자바 해독 PHP &에 암호화 자바
  2. 에 해독 C &에 암호화
+0

안녕하세요, 스택 오버플로에 오신 것을 환영합니다. 질문을 편집하여 실제 질문을 강조하십시오. 사람들에게 지식 공유를 요청하기 만하면 토론이 이루어 지므로 커뮤니티가 건설적이지 않은 것으로 끝날 위험에 처하게됩니다. 이 [편집] 링크를 사용하여 게시물을 수정하고 이해하지 못하는 것에 관한보다 구체적인 질문을하십시오. 행운을 빕니다! :) – jmort253

+1

감사합니다 jmort253. 내가 제안한대로 편집을 했어. –

+0

대칭 암호화 또는 비대칭 암호화 (예 : RSA)를 원하십니까? 전자는 바이트를 처리합니다 (따라서 빅 엔디안/리틀 엔디안은 암호문에 중요하지 않습니다). 다른 하나는 정수를 사용합니다. –

답변

0

좋은 상호 운용성을위한 하나의 매우 중요한 측면은 표준 준수입니다.

우수한 암호화 표준에는 테스트 벡터가 제공됩니다. 두 엔드가 동일한 스펙을 구현하고 관련 테스트 케이스가 검증 된 경우, 서로 성공적으로 대화 할 가능성이 훨씬 높습니다.

예를 들어 비밀번호에서 AES 키를 가져와야한다고 가정 해 보겠습니다. openssl을 사용하는 경우 일반적인 EVP_BytesToKey 기능을 사용하려고 할 수 있습니다. 불행히도 표준 유도 알고리즘이 아니기 때문에 다른 쪽에서도 openssl을 가지고 있지 않으면 문제가 발생할 수 있습니다. PBKDF2와 같은 표준을 사용하는 것이 더 낫습니다. 대부분의 라이브러리가 구현하는 명료하고 잘 알려지고 광범위한 표준 (RFC2898)이 있기 때문입니다.

불행히도 암호화 표준은 프리미티브에만 초점을 맞추는 경향이 있으며, 여러 가지 표준을 함께 접목해야하는 경우가 종종 있습니다. "접목"은 상호 운용성이 떨어지는 영역으로 판명 될 수 있습니다. 이런 이유로, 가능한 한 가장 광범위한 표준화 알고리즘을 사용하는 것을 제안합니다. 심지어 약간의 추가 복잡성을 희생해야합니다.

예를 들어 암호화하려면 CCM (정의 - 기타 중 - 정의 : RFC3610)과 같은 표준 인증 모드를 선택하는 것이 좋습니다.

  • 암호화
  • 인증
  • 패딩
  • IV의
  • 배달
0
내가만큼 당신이 선택으로, 바이트 순서 (숫자 빅 endian 대 리틀 엔디안)를 추가하지만 것

동일한 알고리즘 (및 매개 변수) 및 데이터 형식, 하나의 플랫폼에서 암호화되는 것은 다른 플랫폼에서 해독 가능해야하며 반대의 경우도 마찬가지입니다. 이것은 오늘날 SSL이 어떻게 작동하는지 보여줍니다.

1

시도하고 당신이 정말 관심이 있다면 같은 CMS와 같은 컨테이너 형식을 사용 하나에서 당신에 대한 상호 운용성을 얻을 이동 상호 운용성. BER/DER로 인코딩 된 ASN.1을 배포합니다.이 구조는 메시지 구조의 이진 인코딩으로, 메시지의 텍스트 인코딩 인 XML과 유사합니다. 유감 스럽지만 모든 플랫폼에 이러한 메시지 형식이 포함되어있는 것은 아닙니다. 그러나 지원되는 경우 메시지를 인코딩/디코딩 할 수 있다고 합리적으로 확신 할 수 있습니다.

PHP는 까다 롭습니다. PHP는 openssl 래퍼 또는 끔찍한 mcrypt 라이브러리에 의존합니다.

관련 문제