암호화
대칭적 암호화(Symmetric Encryption)
암호화에 필요한 키가 복호화 키로도 사용이 되는 암호화 방식을 말한다.
키가 하나만 있으면 되기에 간편한 방법이지만 키를 건네줄 때 부담이 생기게 된다.
암호화된 내용도 중간에서 가로챌 수 있는데 키라고 중간에 못 가로챌 일은 또 없다.
이렇게 하나의 키로 암호화와 복호화를 모두 하게 되면 키를 교환하는데에 부담이 생기게 된다.
공개키 암호화(Public-Key Encryption)
그래서 이런 부담을 줄이고자 나온게 공개키 암호화다.
각 사용자들은 모든 사람에게 알려진 공개 암호화 키와 자신만 알고 있는 비공개 복호화 키를 하나씩 갖고 있다.
사용자가 아마존에게 암호화된 주문 정보를 보내는 것을 예시로 보자.▼
아마존은 암호화를 해주는 public key와 이를 복호화 해주는 private key를 만든 후, public key를 사용자들에게 전송한다.▼
아마존이 보낸 public key를 토대로 사용자는 보낼 정보를 암호화하고, 암호화된 내용을 아마존에게 건네준다.▼
아마존은 사용자가 보낸 암호화된 정보를 스스로가 갖고 있던 private key로 복호화 하여 안전하게 주문 정보를 받아온다.▼
공개키 암호화의 주요 관심사는 어떻게 암호화 키와 복호화 키를 선택하는가에 있다.
기술적으로는 단방향 함수의 존재에 의존한다.
RSA Public-Key 암호화
가장 널리 사용되는 공개키 암호화 방식은 RSA public-key 암호화 방식이다.
전 세계적으로 사용되기 때문에 사실상 세계 표준과도 같다.
RSA 암호화는 다음의 순서대로 진행이 된다.
1. 공개키와 개인키 만들기.
RSA 암호화에서 공개키는 $L$과 $e$ 라는 두 정수로 이루어져 있고, 개인키는 $L$과 $d$ 라는 두 정수로 이루어진다.
$L$ 은 충분히 큰 수 이며, $p$ 와 $q$ 라는 두 소수로 구성 된다. $(L=p*q)$
여기서 $e$ 는 $(p-1)*(q-1)$ 과 서로소인 값이다.
복호화 키 $d$ 는 $ d e=1\ \ mod \ \ ((p-1)(q-1)) $의 계산으로 구한다.
이렇게 구한 두 값이 암호화 키와 복호화 키가 된다.
2.암호화 하기.
암호화 함수는 $S = I^{e}\ \ mod\ \ L$,
복호화 함수는 $I = S^{d}\ \ mod \ \ L$ 이다.
아까 구한 e와 d로 계산한다.
서버 인증하기 : SSL 프로토콜
위의 예시와 같이 사용자가 아마존에서 주문을 하기 위해 카드 정보와 같은 주문 정보를 보낸다고 해보자.
그런데 사용자가 주문하기 위해서 아마존에서 받은 public key가 정말 아마존에서 준 것인지 어떻게 확신할까?
만약에 누군가가 아마존 웹사이트를 비슷하게 만들어서 아마존 사칭을 하고 있는 것이면 어떡할까?▼
이런 상황을 위해 제 3자인 Verisign과 같은 CA(Certificate Authority)가 등장한다.
CA는 디지털 인증서를 발급해주는 신뢰가능한 기관이다.
그러면 Verisign에게 인증을 받는 과정은 어떻게 될까?
우선 아마존이 public key와 private key를 생성한다.
그리고 Verisign에게 public key를 보낸다.▼
아마존의 public key를 받은 Verisign은 Verisign만 아는 private key로 암호화를 한 인증서를 아마존에게 다시 보내준다.▼
사용자의 브라우저는 주문을 할 때 아마존에게 인증서를 요청한다.
아마존은 그 요청을 받고 브라우저에게 암호화된 인증서를 보낸다.▼
브라우저에는 Verisign이 공개한 public key가 있기에, 암호화된 인증서를 public key로 복호화 하여 확인한다.
인증서 안에는 Verisign의 인증과 Amazon의 public key가 있다.▼
신뢰할 수 있게 된 사용자는 주문 정보를 제공받은 public key로 암호화 하여 아마존에 다시 보낸다.▼
아마존은 암호화된 주문정보를 private key로 복호화하여 카드 정보를 받는다.▼
디지털 서명
이번에는 아마존이 사용자를 못 믿는다.▼
아마존은 사용자에게 되묻게 된다.
나한테 너를 고라니라고 보냈는데 너 정말 고라니 맞아?
우선 양 쪽 모두 public key와 private key를 만든다.
사용자는 아마존을 신뢰한다고 가정하고, 아마존의 public key를 제대로 수령했다고 한다.▼
우선 사용자는 스스로의 private key로 주문 정보를 암호화한다. ▼
그리고 아마존이 제공한 public key로 정보를 한 번 더 암호화 한다.
그리고 보낼 때 사용자는 스스로의 public key도 같이 보낸다. ▼
public key와 2번 암호화 된 주문 정보를 받은 아마존은 아마존 스스로의 private key로 복호화를 한다.
그리고 사용자가 보낸 public key로 다시 복호화를 한다.
만약에 다른 사용자의 private key로 암호화 된 것이라면 아무런 의미가 없는 정보가 나오게 된다.
즉, 읽을 수 있는 정보가 나왔다는 것은 사용자가 스스로를 인증했다는 것이 된다.▼
'CS > 데이터베이스' 카테고리의 다른 글
Transaction Management Overview (0) | 2024.04.04 |
---|---|
통계 DB의 보안(내용보완필요) (0) | 2024.04.04 |
파일 구성과 인덱싱 (0) | 2024.03.01 |
디스크와 파일 (0) | 2024.03.01 |
B+ Tree (0) | 2024.03.01 |