golang

Golang: AES-GSM에서 additional data의 활용

주먹불끈 2021. 9. 8. 18:56

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 읽어와서 쓴다.

 

반응형