PHP 웹 서비스에 연결하는 Silverlight 앱이 있습니다. 나는 webservice와 Silverlight 클라이언트 사이의 통신을 암호화하고 싶다. 나는 SSL에 의존하지 않는다. 나는 AES 256bit Key와 IV를 사용하여 POST 문자열을 암호화/복호화하고있다.Silverlight 및 암호화, 키/iv 쌍을 저장/생성하는 방법?
큰 질문은 다음과 같습니다
가 어떻게 PHP에서 임의의 고유 키/정맥 쌍을 생성 않습니다.
안전한 방법으로 웹 서비스와 실버 라이트 클라이언트간에이 키/iv 쌍을 어떻게 공유합니까?
클라이언트에 하드 코딩 된 키 또는 iv가 없으면 불가능한 것처럼 보입니다. 어느 쪽이 보안을 해칠 것입니다.
이것은 공개 웹 사이트이므로 로그인 할 수 없습니다. 보안 통신의 요구 조건.
PHP 소스 코드에서 SHA256으로 타임 스탬프 솔트로 해시 된 다음 키 또는 IV로 할당 된 시드 (seed)를 하드 코딩 할 수 있습니다. 이는 서버에 있으므로 매우 안전합니다. 그러나 클라이언트에서 하드 코딩 된 경우 키/iv 쌍의 시드가 표시됩니다.
타임 스탬프를 예측할 수 있으므로 고유성/무작위성을위한 기준으로 타임 스탬프를 사용하는 것이 더 이상 확실하지 않습니다. 그러나 C# 코드와 PHP 코드 사이에는 공통된 요소가 있습니다.
내가 생각할 수있는 유일한 다른 옵션은 Silverlight 클라이언트뿐만 아니라 php webservice에 키/iv를 제공하는 제 3의 서비스를 포함하는 것입니다. Silverlight 클라이언트에서 키/iv 배포 서비스에 액세스하기위한 자격 증명을 저장하는 방법에 대한 질문과 함께이 과정을 새로 시작하십시오.
민감한 데이터는 웹 사이트의 관리 백엔드에서만 볼 수 있으므로 솔루션과 같은 사운드는 비대칭 암호화입니다. 안타깝게도 Silverlight에는 비대칭 암호화 클래스가 없습니다. 해결책? 내 자신의 Diffie-Hellman 키 교환 롤! 그 열쇠를 AES256에 꽂아 라!
하지만 암호화 된 SSL 트래픽을 쉽게 볼 수 있다고 읽었습니까? – cmaduro
RSA 암호화 된 DH 키를 사용할 수 있습니까? 좋은 해결책 인 것 같습니다. 누가 기본적으로 연결하려고하는지 신경 쓰지 않기 때문에, 나는 어떤 통신이 보내 졌든지간에 항상 변경되거나 도청되지 않았다고 항상 확신합니다. 이 경우 웹 서비스에 대한 각 요청이 고유 키를 생성하기 때문에 서버에서 요청한 정보가 자연스럽게 원래 요청자에게 돌아가고 다른 사람에게는 쓸모가 없습니다. – cmaduro