changes.mady.by.user Mason Yun
Saved on Jun 08, 2023
Saved on Jul 18, 2023
...
준비물
버즈빌 매니저 통해 AES-256 암호화에 필요한 아래 값들 발급:
AES-256
AES Key (길이 32)
AES IV (길이 16)
발급된 AES Key와 IV를 매체에 전달할때 값을 암호화해서 전달하기 위해 매체에서 public-key를 발급하여 버즈빌 매니저에게 전달
진행 절차
버즈빌 서버에서 HTTP Request parameter를 암호화
JSON serialized parameters(string)에 해당 string을 UTF-8 인코딩 적용
UTF-8
해당 string에 PKCS7 패딩 적용 및 AES 암호화 진행
PKCS7
암호화된 값을 base64 encoding을 진행
base64
암호화 된 데이터를 HTTP POST request에 파라미터 data라는 이름으로 추가하여 전송
data
e.g
{ "data": "cg087LiIp30jCWpc3MVLfxPL4F05OFGGCkQwwpS6pRVMZhkumzfTFxc8iBoZ8unI15uk0cmY+CbSeOaLHsd7PaxsbyKISiJ31WJJ1OwfaYttoMwFysKNfL7pSz2HB9ULWZicG8MSPxCPKr9RDqgOXpuEoVm9YR3I4yNE5M0LNltpCTdXRBjTrOcjp+RtEZ1VENtHqTICK18nDqO+91BUt3AJsf4VmzogJ8UpA0izEbY=" }
수신 측 (매체사) 에서는 HTTP POST request에서 data 파라미터를 가져와 아래와 같은 순서로 복호화
암호화된 값을 base64 decoding 진행
해당 decoding된 string을 복호화 진행 이후 PKCS7 패딩 제거
해당 string을 UTF-8 디코딩
예제에서는 AES key, IV 값으로 모두 buzzvil123456789를 사용
buzzvil123456789
{ "unit_id":"12345", "transaction_id":"10000000_1", "user_id":"buzzvil", "point": 1, "action_type":"won", "event_at": 1599622182, "title":"title", "extra": "{}" }
암호화 결과
JSON (UTF-8encoding) → AES encryption → base64 encoding 순서로 진행
cg087LiIp30jCWpc3MVLfxPL4F05OFGGCkQwwpS6pRVMZhkumzfTFxc8iBoZ8unI15uk0cmY+CbSeOaLHsd7PaxsbyKISiJ31WJJ1OwfaYttoMwFysKNfL7pSz2HB9ULWZicG8MSPxCPKr9RDqgOXpuEoVm9YR3I4yNE5M0LNltpCTdXRBjTrOcjp+RtEZ1VENtHqTICK18nDqO+91BUt3AJsf4VmzogJ8UpA0izEbY=
위의 암호화된 문장을 복호화시, 다음과 같습니다.
base64 decoding
r\r<\xec\xb8\x88\xa7}#\tj\\\xdc\xc5K\x7f\x13\xcb\xe0]98Q\x86\nD0\xc2\x94\xba\xa5\x15Lf\x19.\x9b7\xd3\x17\x17<\x88\x1a\x19\xf2\xe9\xc8\xd7\x9b\xa4\xd1\xc9\x98\xf8&\xd2x\xe6\x8b\x1e\xc7{=\xaclo"\x88J"w\xd5bI\xd4\xec\x1fi\x8bm\xa0\xcc\x05\xca\xc2\x8d|\xbe\xe9K=\x87\x07\xd5\x0bY\x98\x9c\x1b\xc3\x12?\x10\x8f*\xbfQ\x0e\xa8\x0e^\x9b\x84\xa1Y\xbda\x1d\xc8\xe3#D\xe4\xcd\x0b6[i\t7WD\x18\xd3\xac\xe7#\xa7\xe4m\x11\x9dU\x10\xdbG\xa92\x02+_\'\x0e\xa3\xbe\xf7PT\xb7p\t\xb1\xfe\x15\x9b: \'\xc5)\x03H\xb3\x11\xb6
AES decryption) Key, IV: buzzvil123456789
{"unit_id": "12345", "transaction_id": "10000000_1", "user_id": "buzzvil", "point": 1, "action_type": "won", "event_at": 1599622182, "title": "title", "extra": "{}"}
UTF-8 decoding
(memo) 위의 예제에 한글이 없기 때문에 UTF-8 decoding 을 거치지 않아도 같은 결과가 나옵니다.