하루에 0.01%라도 성장하자

Develop/Android

Android - RSA Encrypted / Decrypted

뚠님 2021. 5. 10. 01:12
반응형

이번에 프로젝트를 하면서 팔자에도 없는 암호화 한다고 아주 머리아팠다...

 

사실 지금까지의 암호화? 라고 하기에는.. 그냥 라이브러리를 갖다 쓰거나, 해당 라이브러리에서 자체적으로 암호화를 해주는 것들로 했기 때문에 디테일 하게 보지도 않았을 뿐더러...

 

암호화라는 이론적인 지식에 큰 관심이 없었는데

이번에 앱에서 인증서를 관리해야하는 상황이 와서 인증서 데이터를 암호화 해야하는 상황이 발생했다.

 

인증서는 다른 업체를 통해 받는데, 인증서를 통해서 추출한 민감데이터를 서버에 송수신할때 사용할 암호화였다.

 

암호화를 어떤 기법(?)을 사용해야 하는지 몰라서 이것저것 찾아보다가 결국 인증서 업체에 문의..

 

RSA 암호화를 사용해야 한다고 했고 바로 적용하려고 하였으나... 너무 어렵고..

 

이론 공부를 좀 했다.

( 역시 암호화는 어렵고 천재들의 영역이야 .. )

 

사실 나는 암호화나 여러 기법들을 공부해야하는 시점이 오면 이상하게 그 기법들 보다는 그 기법들이 탄생하게 된 계기? 같은게 더 눈에 들어오고...재밌고...뭐 그래..

 

간단하게 말하면 RSA 기법은 Public Key와 Private Key값을 이용한 암호화 방법이다.

 

암호화를 할때 Public Key를 이용해서 암호화를 하고, 복호화를 할때는 Private Key값을 이용해서 복호화 하는 방법인데,

이는 기존 단순한 키를 이용한 암호화에 비해 암호화 복호화 키값이 각각 있어서 보안이 한층 더 강화되는 효과가 있다.

 

RSA 암호화는 1024, 2048, 4096 등의 키길이가 있는데, 뒤에 숫자가 클수록 해킹 난이도가 급상승하고, 키의 길이가 길어진다.

( 참고로 인터넷 뱅킹에서 사용하는 암호화는 RSA-2048 이라고 한다. 나무 위키에서 봤는데... 변경되었을라나..)

 

통신을 할때는 아래와 같은 순서로 진행하였다.

 

1. Public key로 데이터 RSA 암호화

2. Base64 암호화

3. 전송

4. 데이터를 받으면 Base64 복호화

5. RSA 복호화

6. 데이터 사용

 

이때 순서로 진행될 때 RSA 암호화 복호화에 사용되는 키값의 길이는 아래와 같은 특성이 있다.

암호화 : 키값 / 8 -11 
복호화 : 키값 / 8

 

이점을 참고해서 코딩하면 무난하게 구현할 수 있다.

다만 이제.. PublicKey.pem 파일과 privateKey.pem 파일을 어디에 저장할지가 문제인데..

반응형