2011년 10월 25일 화요일

Silverlight Data 통신 시의 암호화

Silverlight 등 Client 모듈과의 통신 시에 고려해야 할 사항을 살펴보면,

  1. 통신 프로토콜 및 포맷을 결정해야 합니다.
    HTTP 통신이 대세므로 논외로 하고, 포맷은 XML, JSON, Byte Array 등을 결정해야 합니다.
  2. 그 다음으로 서버 쪽 통신 Daemon 을 IHttpHandler, Web Services, WCF 등을 선택해야 합니다.
    1. WCF 의 경우는 Binding 방식, Protocol 등의 설정 방법이 무지 많으므로, 더 많은 확장성이 있습니다.
    2. Data 처리 방식으로 동기/비동기 방식을 결정해야 합니다.
  3. 압축을 지원할 것인가? 한다면, 어떤 압축 알고리즘을 지원할 것인가?
    1. GZip (NET 기본)
    2. Deflate (NET 기본)
    3. ISharpCode.SharpZipLib.dll 에 있는 GZip, BZip2 알고리즘
    4. 7Zip 알고리즘
  4. 암호화를 지원할 것인가? 어떤 암호 알고리즘을 지원할 것인가?
    1. .NET에는 대칭형 알고리즘 중에 상당히 많은 알고리즘을 제공합니다. DES, RC2, TripleDES, Rijndael 등
    2. Silverlight 에서 제공하는 대칭형 알고리즘은 AES 클래스로 대응되는 것 달랑 한 개?

자 이제 실버라이트의 통신 관련 결정 사항이 많다는 것을 아실 것입니다.
뭐 닥치고, OData 나 Microsoft 의 Dynamic Data 등 DataContext 사용 방식이 있겠습니다만, 내부적으로는 HTTP 웹서비스에 JSON 포맷의 데이터 전송 방식이라 하겠습니다.

오늘은 위의 여러 가지 결정사항 중 가장 늦게 결정해도 되는 (SSL 이 있으니, 안 해도 됩니다!!! 라고 주장하시면 할 말 없습니다.) 암호화 관련 사항에 대해 짚어보겠습니다.

위에서 보셨듯이 .NET Framework 2.0 이상부터 상당히 다양한 암호 알고리즘을 제공하고, 양방향 통신 시에 가장 많이 쓰이는 대칭형 알고리즘은 AES 기반으로 발전된 많은 알고리즘을 제공합니다. 근데 왜!!! 실버라이트에서는 AesManaged 라는 클래스 달랑 하나만 지원하냐구요? Rijndael 은 내부에 숨어서 사용도 못하고 (물론 사용하려면 하겠지만)

그래서 암호화 지원을 할 수 있는 방법은 .NET에서 제공하지 않지만, 한국에서는 꼭 써야 할 ARIA 알고리즘을 적용하기로 했습니다.
뭐 결론이 이미 있는데, 뭐하러 다른 걸 시도하지? 라고 하실지 모르지만, 누가 알겠습니까… 제가 만든 제품이 외국에도 팔리고, 암호화 알고리즘을 미국 규격인 AES 를 따라야 한다라고 한다면… ㅋㅋ

어쨌든 ARIA 알고리즘을 이용하여, 제품에 적용하기 위해, 사전에 단위 테스트를 수행해 봤습니다.


AriaEncryptor_for_Silverlight

AriaEncryptor_for_Silverlight_Log

제대로 Silverlight 에서도 암호화 및 복호화가 제대로 되는군요^^. 이제 Silverlight 와의 통신 시에는 ARAI 알고리즘 을 이용한 데이타 암호화를 기본으로 사용하려고 합니다.


더 좋은  방안이 있는 분께서는 의견 주시기 바랍니다.

댓글 없음: