개발 가이드
- Quick Start Guide
- 프로젝트 준비
- 프로젝트 시작
MESSAGE ENCRYPTION 이란?
KONA PLATE를 통한 KONA 결제 플랫폼 서비스 사용을 위해 제공되는 API는 개인정보 및 민감한 데이터를 요청받거나 또는 응답을 제공하고 있습니다.
KONA PLATE는 TLS(전송 계층)의 보안과 카드 정보, 고객 정보 등 다양한 민감성 있는 외부 누출로 인한 데이터 재사용을 하지 못하도록 비대칭 암호화 방식을 통한 데이터 보안 서비스를 재공하고 있습니다.
ME는 아래의 내용의 데이터 포함 시 제공되고 있습니다.
- PII (personally identifiable information / 개인 식별 정보)
- PAN (primary account number / 개인 계좌 번호)
- PAI (Personal Account 개인 계정 정보)
KONA PLATE의 ME는 비대칭 암호화 기술(공개 키 암호화)을 사용하여 메시지 메피로드에 대한 향상된 보안을 제공합니다.
ME는 128비트 또는 256비트의 AES(Advacnced Encrytpion Stardard), GCM(Glois Counter Mode)을 사용하는 대칭 암호화를 통해 개발되었습니다.
키 암호화는 2048비트의 RSA OAEP(Optimal Asymmetric Encryptio Padding)로 지원하고 있습니다.
ME는 JWE를 사용하여 SSL을 통해 Request, Response의 암/복호화를 지원하며 API의 Request/Response 암호화 여부를 확인하여 요청되어야 합니다.
API의 Request/Response 암호화 여부는 Api Document에서 확인해 주시기 바랍니다.
- 서버 인증서 : KONA PLATE에 요청을 보낼 때 클라이언트는 서버 공개 키를 사용하여 메시지 페이로드를 암호화하고 KONA PLATE는 서버 개인 키를 사용하여 페이로드를 복호화 합니다.
- 클라이언트 인증서 : KONA PLATE에서 응답을 받을 때 KONA PLATE는 클라이언트의 공개키를 사용하여 페이로드를 암호화 하고 클라이언트는 서버의 개인 키를 사용하여 복호화 합니다.
MESSAGE ENCRYPTION 요청 방법
- 생성된 프로젝트에서 암호화 키를 발급받습니다.
- 서버의 공개키를 이용하여 페이로드를 암호화하여 문자열로 생성합니다.
- 요청의 헤더에 X-KM-Crypto-Key-Id의 이름으로 암호화 키 ID를 추가합니다.
헤더 항목 Value Accept application/json X-KM-Crypto-Key-Id x-km-crypto-key-id* - encData의 필드명으로 서버에 API를 요청합니다. 응답도 암호화 설정이 있는 경우 encData의 필드명으로 응답이 되어 집니다.
- 응답 값이 암호화가 된 경우 응답 값의 헤더 값의 암호화 키의 서버 공개키로 데이터를 복호화 합니다.
Sample Message Encryption구분 Message Request {
"encData": "eyJlbmMiOiJBMTI4R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.Jr_65BmLWw6lpcbRTWXH6fi04RvoSs6nv6WRh99mletj5vSoFkJf6y
JnJrtz3FKw9t2oOLX-_zb-F08dOtt6xVlMlb41HEIvRtINGNpMIKNQnmryiVCmDyPc7NFxLoCTMAcv4cxtL9FX-TpX_sNty5Nm2MsrKNnjln8nVQvoFtt
brFpED7vCfFqKmqAp9bDQwyp8PJXBjOxdAe0F0DsdoEp5al7cwY9I7cBEhCI452qR_wXyikrAesaN74a9vEEn6znetrRwcyzc8gLou9agQ8ppdWrS8
VpS5oOBXW5953lR_Br0tkBB7fCL2nB8C_gLCD0P8IlSeDYnQn7je_izyg.TsETXkd6Xa-TGPhI.VFsS2-brNJwYJqdWfqcepmF-u1zhAf3cy0lFMp9k4Yy
739p_P0of1VxrIWeqd5o3DdPuDtEY16coIiZd7m_9GrVb_m_X9w.ksZ2ueGkYovMS9ODX7m1zg"
}Response {
"encData": "eyJlbmMiOiJBMTI4R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.P0S41dkjgELl7yOf4dM9ld7e4X4IQ3nlhUbBDAV9Mv6AGhdr4KH-HPjOY
unEKzf9JrLFngNmTTfxYjMngNGHKShE3h-WMf-Il1PlBNyd7_Rbq1uQre4UOyG7zzKESMdc8yE8hhJwqVHQscIyfGGex3NKpTmHci4i97-JytW-Ubqqx
x8qvd0q5b8WJ3ykszh3ZcVbfv2nssCZKhoK0fhVsHx1Ucbd4TTNgIsOBeyKRXbxsLAkcsZbMeVcVdDQFX60qzxTMzBtA22SmgAXqrur5R0byVf27f9p
4DakkvXPXZI9zwCssOPlXE_8nXZ1CrNwiGsLg5iEQ9zI6CcOy8t-w._K98ydHorNTKsSJB.aYpj6ZXT2Ll2S5LOLuigdDeLOQ4FoL9bJbW9waS-KOFow2
VavpvYMy7Ngn_-GIuXD5ghVEx6dJhSbPLDqRehrYrmQlkuSwAOq8upwFJV0CY4AIDX4z1tsNsRS2GsOvc3XHAEZd3iC9ZFSg8JXMHF9n
TJkKWKDl2xvLMuC8OEC70g4qnsTMUkvYGcIF62UObeU4h2DqFzk_L0rTlXXyg6o
uQiYtmIfVaTbpRPa2IcjWJe0iWswubG4YCmuJKJs-VLG3pid08IcUsETW3MlaqkAVlS1XaRpE8kYHTbfGfbp3Ckw8h7Ur55_iFEZwI19caMleQE6lSkVryimudIaVjQaWrHnLNR1cHR0mWJeUW4xTeGnVrtYeWjH
uJ7zsgMhvLQbISaySDRqEu7fEA8Jp7TkC0ywR-0f8ajRYDstFotcTDkP9QI1CadVLCEBIm3ndFkn5BIj-i6xcfZSOFn2rzc0GsezqbY07DcebTtC2CAmQZLdJ-iWTpU-6mdV_nSy1NPlry0eszsQlwItTTB2ktsUTll9oRpdyaucPTMB2r90Lc9bDMy1bipUMgBLoLGyFUNC-1BDgUnmC_X6nYoCDA7QHH_F53xtbNn4lb8a6THCHFFgTMz63rgtwg9r2pAeDMBH7ouTRDzLN4SKlU0OpjmhcQ1Td0WoyjfUHoCse_Cm9-Zbueegfk5XB24YF0ctK.-NN9qbJL-HRd3gfcGBZBfA"
}
PEM Sample
- 인코딩 방식은 UTF-8 입니다
- 서버 PEM 파일에서는 개인키를 제공하지 않습니다.
파일명 예시 : 5cd10fa4b92f7b33995360267efc67cf_client.pem
-----BEGIN PUBLIC KEY----- -----BEGIN PRIVATE KEY----- |
Sample Code - Encryption/Decryption
#Java