mirroring with hmac

Jae Min·2023년 9월 6일
0
post-custom-banner

hmac : hash-based message authentication code 암호화 해시 함수와 암호화 키를 동반한 메세지 인증 방법이다.

🔥 개발 계기

CX 팀에서 VOC 를 듣고 핸들링할 때 BO사이트에서 대고객 사이트를 미러링 할 수 있는 기능이 있으면 좋겠다 라는 애로사항이 있어서 미러링 기능을 만들게 되었다.

실제 완벽한 미러링이라면, 원격지원처럼 실시간으로 마우스 포인터도 움직여지고 클릭 하나하나 전부 동시 확인 가능한 기능이겠지만, 우리는 그렇게 까지는 아니고, 고객의 동의하에 고객의 계정으로 로그인을 해서 접속하는 방식을 채택했다.

🔥 시나리오

시나리오는 다음과 같다.
1. BO 프론트에서 BO 백으로 미러링 요청을 한다.
2. BO 백에서 일련의 검증 후에 hmac signiture 을 만들어 반환한다.
3. BO 프론트에서 해당 hmac signiture 을 가지고 메인 사이트 프론트로 끌고간다.
4. 메인 사이트 프론트에서 메인 사이트 백으로 hmac signiture 를 전달한다.
5. hmac signiture 를 다시 BO 백으로 전달후, hmac signiture 를 검증한다.
6. 검증 후 이상 없으면 메인 사이트 토큰(authentication token)을 발급한다.

🔥 프로세스

capa-mirroring-flow-chart

🔥 질문

  1. 왜 굳이 bo api 에서 발급한 hmac signiturebo api -> bo -> capa -> capa api -> bo api 와 같이 복잡하게 돌아가는가 ?
    👉 bo api 로 토큰 발급 요청이 우리 서비스 capa api 로 부터 온 것인지 아닌지를 확인할 수 있다.

  2. timeStamp(5s)는 무슨 역할인가 ?
    👉 혹여나 누군가 hmac signiture 를 약탈해서 요청을 했을 경우를 대비해서 5초 라는 약간의 방어책을 만든 것이다. 동일한 환경에서 동일한 시그니처를 약탈해도 5초가 넘어가면 이상 요청이라고 판단하기 위함이다.

  3. authCode 는 무슨 역할인가 ?
    👉 timeStamp 와 마찬가지로, 방어책 역할이다. 동일 환경에서 동일 시그니처로 요청을 보냈는데 5초 안에 요청을 보냈다면 정상 요청이라고 판단할 수 있고, 혹시 이미 보냈던 요청을 그대로 복사해서 다시 요청을 보낼 수도 있다.
    또한, timeStamp 는 사실 요청 시간을 변조해서 보낼 수 있기 때문에 완벽한 방어책이라고는 볼 수 없다.
    그래서 authCode(uuid)를 만들어 한번 요청을 보내면 디비에 체크를 하고 동일 authCode 로 요청이 오면 이상 요청이라고 판단하기 위함이다.

🔥 코드

const hmac = crypto.createHmac('sha-256', accessKey);
const signiture = hmac.update(message.join('')).digest('base64');

hmac 만드는 코드는 많이 나와있기 때문에 간단하게 넘어가겠다. 주고 받는 쪽에서 그들만의 규칙을 정해서 만들면 되기 때문에, 중요한 건 저 코드 두줄이 될 것으로 보인다.

profile
자유로워지고 싶다면 기록하라.
post-custom-banner

0개의 댓글