티스토리 뷰
Photo by Alex Motoc on Unsplash
AES-GSM 알고리즘을 이용할 때에 nonce를 포함시키거나 aditional data를 추가시키는 경우를 알아보았다.
블로그 포스팅 링크: https://jusths.tistory.com/232
그 중에서 additional data를 활용하여 보안을 강화시키는 방법 하나를 공유해 본다. 더욱 널리쓰이는 활용법이 있는지 모르겠으나 (있다면 알려주시면 많은 공부가 되겠습니다). 렇게 사용할 수도 있다는 예로서 보면 되겠다.
additional data를 쓰지 않는 상황
Device A에서 data를 만들었는데 Device B에서도 쓰고 싶다. 하지만 보안상 안전해야 한다.
상황: 서버와 디바이스들 사이에는 HTTPS(TLS)를 이용하여 통신상의 보안을 확보한다
1) 서버에서 두 디바이스에서 사용할 secret key를 생성한다.
2) 서버가 두 디바이스로 secret key를 전달한다. (on HTTPS)
3) Device A는 서버가 준 secret key로 데이터를 AES-256-GCM으로 암호화한다
4) 서버에 암호화된 데이터를 전달하면, 서버는 이를 Device B에게 전해주고
5) Device B는 이를 복호화하여 쓸 수 있다.
하지만, 만약 서버와 디바이스간의 MITM(Men In The Middle)에서 어떠한 방법을 써서든 secret key와 encrypted data를 탈취했다면? 대략 난감해진다.
additional data를 second key로 써보자
다른 모든 상황은 위와 동일한데 Device A에서 암호화를 할 때에 second key를 additional data 파라미터로 추가로 넣어서 암호화 한다. 이렇게 암호화된 데이터는 Device B에서 복호화 될 수 있다. Device B 역시 second key를 가지고 있기 때문이다.
이제는 MITM이 secret key와 encrypted data를 탈취했다 하더라도 복호화 할 수 없다. second key가 없기 때문이다. 보안이 강화 되었다.
second key는 Device A, Device B의 내부에만 존재하며 공장에서 생산될 때에 디바이스 내부에 설정된 다음에는 바깥으로 나오지 않는다. 즉, 통신등을 통해 외부로 노출되지 않는다. second key는 하드코딩되어 저장되어 있을 수도 있고, 좀더 보안을 강화한다면 디바이스에 보안칩을 추가하여 공장의 공정중에 second key를 주입한 다음, 런타임에서만 하드웨어적인 라인을 통해 보안칩에서 second key를 읽어와서 쓴다.
'golang' 카테고리의 다른 글
Golang Gin Gonic - 2. Bind data (0) | 2021.09.17 |
---|---|
Golang Gin Gonic - 1. Basic REST API (1) | 2021.09.14 |
Golang: AES 암호화 알고리즘의 이용 (0) | 2021.09.07 |
Golang: 사용자의 비밀번호를 저장하고 인증하는 서버 만들기 (0) | 2021.08.18 |
Golang: Marshaling 된 JSON을 Indent하여 보기 (0) | 2021.08.04 |
- Total
- Today
- Yesterday
- go
- intellij
- notion
- bun
- folklore
- Bug
- 독서후기
- 클린 애자일
- postgres
- 독서
- Gin
- 2023
- golang
- pool
- solid
- 체호프
- 인텔리제이
- github
- websocket
- 잡학툰
- strange
- 노션
- 영화
- JIRA
- ChatGPT
- OpenAI
- 제이펍
- agile
- API
- Shortcut
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |