[Tips] MO 인증이란? 휴대폰 본인인증 무료 사용하기

728x90

얼마전에 일 때문에 국민은행 계좌를 하나 새로 만들 일이 있어서, 비대면 계좌 개설을 하려고 KB스타뱅킹 앱을 설치하고 가입을 진행하고 있었습니다.
가입 중간에 본인인증을 하는 단계가 나오는데 인증 방식중에 좀 낯선게 하나 있더라고요?
코드랑 번호를 보여주면서 "문자 메시지를 그대로 전송해주세요" 라는 안내였습니다.


평소에 익숙한건 서비스가 내 폰으로 문자 보내주면 내가 그 코드를 입력하는 방식이었는데, 이건 반대로 내가 문자를 보내야 하는 방식이더군요. "어라, 이거 뭐지?" 하면서 시키는대로 문자를 보냈더니 웹페이지에서 바로 인증 완료로 넘어가는거였습니다.

신기해서 좀 찾아봤더니 이게 MO(Mobile Originated) 인증 이라고 불리는 방식이더라고요.

그래서 오늘은 이 MO 인증이 뭔지, 우리가 흔히 아는 SMS 인증과는 뭐가 다른지 정리를 해봤습니다.


MO 인증이 뭔가요?

MO(Mobile Originated) 는 말 그대로 "모바일에서 발신(Originated)" 한다는 뜻입니다.
즉 사용자가 자신의 휴대폰에서 문자를 보내고, 서비스는 그 발신 내역을 확인해서 본인이 맞는지 검증하는 방식이지요.
반대 개념으로는 MT(Mobile Terminated) 가 있는데요, 우리가 흔히 알고 있는 SMS 인증이 바로 이쪽입니다.
서비스가 내 폰으로 문자를 보내면(Terminated, 수신) 내가 그 코드를 입력해서 인증하는 방식입니다.
방향만 다를 뿐인데 이게 의외로 보안 측면에서는 꽤 큰 차이를 만들어낸다고 하네요.


MT 인증(기존 SMS 인증) vs MO 인증

구분 MT 인증 (기존 SMS) MO 인증을 간단히 표로 비교해 놓은 자료가 있어서 가져와봤습니다.

문자 방향 서비스 → 사용자 사용자 → 서비스
핵심 확인 번호 수신 가능 여부 번호 발신 가능 여부
서비스측 비용 건당 SMS 발송 비용 발생 서비스측 발송 없음
보안 강도 코드 가로채기 위험 존재 실제 기기 점유 증명
사용자 행동 코드 받아서 입력 직접 문자 발송

여기서 눈에 띄는 포인트가 바로 "실제 기기 점유 증명" 부분입니다.
이 한 줄이 왜 중요한지 조금 더 확인해봤습니다.


왜 금융권은 MO 인증을 쓸까

처음엔 "아니 결국 똑같은 SMS인데 방향만 바뀐거 아니야?" 싶었는데, 좀 더 파보니까 그렇게 단순한 이야기가 아니더라고요.

1. 기존 SMS 인증은 생각보다 약점이 많다

MT 인증(기존 SMS 인증)을 한번 생각해볼게요.
남의 전화번호를 입력해서 가입을 시도한다고 가정해봅니다.

공격자가 어떻게든 SMS를 가로챌수만 있으면 — 심스와핑(SIM Swapping), 통신사 중간자 공격, 문자 피싱 등 — 번호 주인이 모르는 사이에 그 번호로 계정이 만들어질수 있는 구조입니다. 해외에서는 심스와핑으로 가상자산 계정이 털린 사례가 꽤 있었지요.

결국 MT 인증이 확인하는건 "이 번호로 문자를 받을수 있는 누군가" 이지, "이 번호의 실제 주인" 이 아닌 셈입니다.

2. MO 인증은 "실제 기기에서 발송"을 증명한다

반면 MO 인증은 실제 유심이 꽂혀있는 그 기기에서 문자를 보내야 인증이 됩니다.
통신사 망을 통해 실제 발신 내역이 기록되기 때문에, 단순히 번호만 아는 것으로는 인증을 통과할수가 없지요.
이건 사실상 "이 번호를 가진 폰이 지금 내 손에 있다"를 증명하는거라, 보안에서는 점유 기반 인증(Possession-based Authentication) 의 한 형태로 봅니다.
똑같이 SMS를 쓰는것 같아도 방향이 바뀌는 순간 보안 의미가 완전히 달라지는거지요.

3. 이미 오래전부터 검증된 기술

찾아보니 MO 인증은 예전부터 국내 주요 은행, 카드사, 홈택스 같은 곳에서 꾸준히 사용하고 있던 기술이었습니다.
제가 KB스타뱅킹에서 본것도 바로 이거였던거고, 다른 은행 앱이나 홈택스에서 "○○○○ 번호로 문자를 보내주세요" 하는것도 전부 같은 방식이었네요.
몰라서 그랬지 저도 이미 여러번 써봤던 기술이었네요 ㅎ.ㅎ


동작 순서를 정리해보면

개발자 입장에서 실제로 동작하는 내부 로직은 어떻게되는지 정리해봤습니다.

1. 사용자가 서비스에서 "본인인증" 버튼 클릭
2. 서비스 화면에 [인증코드 + 수신 번호] 표시
3. 사용자가 본인 폰의 기본 문자앱으로 해당 번호에 인증코드 발송
4. 통신사 망에 실제 발신 내역이 기록됨
5. 서비스가 통신사/인증 API로 해당 번호의 발신 내역 조회
6. 코드가 일치하면 → 인증 완료

여기서 재미있는 포인트는 3번 단계입니다.
별도의 앱 설치도 없고, 그냥 폰에 기본으로 깔려있는 문자앱을 쓰면 끝입니다.
사용자 입장에서는 오히려 MT 인증보다 단순하지요. 코드를 받아서 다시 입력하는 과정이 없으니까요.


그런데 MO 인증, 우리도 쓸수 있을까?

여기까지 오고 나니 개발자 입장에서 당연히 드는 생각이 있었습니다.

"이거 그럼 나도 내 서비스에 붙일수 있나?"

결론부터 말하면, 원래는 쉽지 않았습니다.
MO 인증은 통신사의 발신 내역을 실시간으로 조회해야 해서 통신사 또는 인증 대행사와 직접 계약이 필요했고, 대부분 대기업 수준에서나 붙일수 있는 구조였습니다.
사이드 프로젝트 굴리는 1인 개발자 입장에서는 그냥 넘사벽이었지요.
그런데 얼마전에 검색하다가 우연히 OCTOMO 라는 서비스를 하나 알게 됐습니다.

공식 사이트: https://octomo.octoverse.kr

MO 인증을 API 형태로 제공하는데, 놀랍게도 Free 플랜에서 월 1만건까지 무료 더라고요.
건당 비용도, 월 기본료도 0원이었습니다.
"어떻게 무료로 제공되는거지?" 싶었는데, 서비스 구조를 확인해보니 그럴수도 있겠다 싶었습니다.

일반 SMS 인증은 서비스측에서 문자를 발송해야 되기 때문에 통신 비용이 발생하는데, MO 인증은 사용자가 직접 문자를 보내는 구조라 서비스측에 SMS 발송 비용이 아예 없는거지요.
비용 구조 자체가 다른겁니다.
무료가 이벤트 성격이 아니라 구조적인 결과라는게 좀 신선했네요.


정리하자면

오늘 새로 알게된 내용을 한번 정리해보면:

  1. MO 인증은 사용자가 직접 문자를 발송하면 서비스가 발신 내역을 검증하는 방식
  2. 기존 MT 인증(SMS 코드 받기)보다 실제 기기 점유 증명이 확실해서 보안에 강함
  3. 은행, 카드사, 홈택스 같은 금융권/공공기관에서 이미 오랫동안 쓰고있던 검증된 기술
  4. 예전엔 통신사 계약이 필요해서 개인 개발자가 붙이기 어려웠지만, 요즘은 OCTOMO 같은 서비스가 API로 풀어놨음

저도 지금 사이드 프로젝트 하나에 본인인증 붙일 일이 있어서 기존 SMS 인증 API 가격표 보고 한숨만 쉬고 있었거든요.
이번에 MO 인증 개념을 알게된 김에 한번 적용해볼까 합니다.
실제로 붙여보면서 MO 인증 적용 후기도 따로 포스팅으로 남겨볼게요~

이상으로 MO 인증이 뭔지, 기존 SMS 인증과는 뭐가 다른지 정리를 해봤습니다.
기술 자체는 꽤 오래된거였는데 저는 이제야 제대로 알게됐네요 ㅋ
혹시 관련해서 추가로 아시는 내용이나 잘못된 부분 있으면 댓글로 남겨주세요~
즐거운 코딩 하세요 :)

참고한 페이지

  1. OCTOMO 공식 사이트 - https://octomo.octoverse.kr
  2. KB국민은행 - https://www.kbstar.com
  3. 모바일 마케팅 개념 - https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%B0%94%EC%9D%BC_%EB%A7%88%EC%BC%80%ED%8C%85
  4. 단문 메시지 서비스 - https://ko.wikipedia.org/wiki/%EB%8B%A8%EB%AC%B8_%EB%A9%94%EC%8B%9C%EC%A7%80_%EC%84%9C%EB%B9%84%EC%8A%A4
728x90