네트워크를 통해 전송되는 plain text 메세지들은 도중에 가로채어져 editor같은 것들에게 읽혀질 수 있다. 우리 시스템의 추가적인 위험은 서비스간에 전송되는 메시지들이다.
예를들어, frontend가 username과 password를 server로 전송할 때 그 메세지들은 네트워크 프로토콜을 통해 plain text로 전송된다. 이 packet은 attacker에 의해 도중에 읽힐 수 있다. 우리는 이전에 encryption과 decryption을 하나의 key로 수행하는 Symmetric Encryption을 살펴보았다.
더 복잡한 encryption은 asymmetric encryption이다. 여기서는 하나 이상의 key가 사용된다. 하나는 encrypt에 사용되며 다른 하나는 decrypt에 사용된다.
Encrypt에서는 private key를 사용한다. Plain text가 알고리즘을 통과헤 cipher textblock이 생성된다. 이 데이터를 decrypt하기 위해서는 동일한 key를 사용하지 않는다. 대신 우리는 대응되는 public key를 사용한다. Private key로부터 생성된 cipher text block을 가지고와서 알고리즘에 통과시킨후 public key를 사용하여 원래의 plain text를 얻는다.
이 방법을 사용하면 우리의 private key를 우리 서비스 안에서 비밀리에 사용하면서 다른 서비스에는 public key를 제공하여 우리가 암호화한 데이터를 decrypt할 수 있도록 한다.
어떤 메세지가 sent back될 때는 public key를 encrypt에 사용하고 private key를 decrypt에 사용하기도 한다.
Asymmetric encryption은 보통 HTTPS(Hypertext Transport Protocol Secure), TSL(Transport Layer Security)/SSL(Secure Socket Layer)을 통해서 전송되는 데이터들을 암호화하는데 사용된다.
보통 웹브라우저의 주소창 왼쪽에 자물쇠 모양으로 나타나는데 이것은 당신이 그 website와 communicate 하기 위해 HTTPS를 사용하고 있음을 의미한다.
개발자로서 시스템간 어떠한 민감한 메시지들을 전송해야할 때 TLS나 SSL 같은 것들로 암호화 해야하는 것을 명심하라. 만약 그 메세지들이 가로채기 당해도 attacker들은 읽을 수 없다.