티스토리 뷰
개요
gRPC 에서 SSL/TLS 로 암호화한 통신을 하는 방법을 정리해본다.
1) 우선 여기서 기반이 되는 암호에 대해 간단히 흝어보고
2) 다음엔 SSL/TLS 의 동작 원리를 이해하고
3) 마지막으로 gRPC 에서 SSL/TLS 를 어떻게 다루면 될 지 알아보려 한다.
* handshake 는 gRPC 가 알아서 다 해준다.
크게 대칭키, 비대칭키, 해시 알고리즘 셋으로 구분해 보았다.
이미지 출처 링크: http://bit.ly/2ZWASxl
대칭키 알고리즘 (Symmetric)
1) 대표적 알고리즘: AES256
2) 간단한 설명
- 암호를 주고 받을 두 명이 (이하 앨리스와 밥이라 하겠다) 같은 비밀키를 가지고 있는다.
- 앨리스가 메시지를 비밀키로 암호화 하여 보내면, 밥은 같은 비밀키로 복호화 하여 메시지를 확인한다. 그 반대도 가능하다.
3) 장점
- (비대칭키에 비해 상대적으로) 빠르다.
- 일단 암호화 되면 비밀키를 모른다면 복호화하는건 불가능하다고 생각하자
4) 단점
- 애초에 비밀키를 어떻게 나눠가지지?
비대칭키 알고리즘 (Asymmetric)
1) 대표적 알고리즘: RSA, ECDSA (Elliptic Curve)
2) 간단한 설명
- 앨리스가 비밀키와 공개키 쌍을 만들어서 공개키를 누구나에게 공개한다. (라임이 좋구나)
- 이를 통해, 앨리스가 보낸 것을 증명하거나, 누구나 앨리스에게 암호화된 메시지를 보낼 수 있게 된다.
3) 용도1. 서명
- 앨리스는 보내고 싶은 메시지를 해시 알고리즘으로 해시값을 계산해내고, 그 해시값을 비밀키로 암호화하여 (=서명) 내보낸다
- 밥이 이를 받았다면 앨리스가 보낸것이 맞는지 확인한다
- 메시지를 해시 알고리즘으로 계산한 해시값 == 서명을 앨리스의 공개키로 복호화 한 것?
4) 용도2. 암호화하여 전달하기
- 밥은 보내고 싶은 메시지를 앨리스의 공개키로 암호화하여 앨리스에게 보낸다.
- 공개키로 암호화된 메시지는 비밀키로만 복호화 가능하다. 비밀키는 앨리스만 가지고 있다.
5) 장점
- 공개키를 대중에게 공개하여도 안전하다
- 용도1, 용도2 와 같이 사용할 수 있다.
6) 단점
- CPU 를 많이 잡아먹는다. 대칭키에 비해 느리다.
해시 알고리즘 (Hash)
1) 대표적 알고리즘: SHA256
2) 간단한 설명
- 한 바이트의 데이터이건, 몇 기가의 영화 동영상이건 해시 함수를 거치면 동일한 길이의 해시값을 출력한다. 원본 데이터의 지문이라 할 수 있다.
- SHA256 이라면 256 비트, 즉 32 바이트의 해시값을 출력해낸다.
- 단방향성이다. 즉, 데이터에서 해시값을 추출해낼 수 있지만, 반대로 해시값으로 원본데이터를 알아낼 수는 없다.
- 필수 요건으로는 해시값을 계산해내는 속도가 빨라야 한다.
'golang' 카테고리의 다른 글
gRPC SSL/TLS 3. 실제 구현 (9) | 2019.07.01 |
---|---|
gRPC SSL/TLS 2. SSL/TLS 에 대하여 (0) | 2019.07.01 |
gRPC Error in Golang (0) | 2019.06.27 |
gRPC Deadline (0) | 2019.06.26 |
Golang 개발시 Makefile 사용해보기 (0) | 2019.06.24 |
- Total
- Today
- Yesterday
- 티스토리챌린지
- 체호프
- go
- 노션
- 독서후기
- 독서
- 영화
- strange
- notion
- 제이펍
- 클린 애자일
- clean agile
- solid
- 오블완
- 2023
- API
- ChatGPT
- OpenAI
- intellij
- Shortcut
- bun
- folklore
- 인텔리제이
- agile
- websocket
- golang
- 잡학툰
- github
- Bug
- Gin
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |