다른 사이트마다 같은 비밀번호 = 최악?

9999·2022년 1월 7일
0

CS

목록 보기
13/19

HTTP 기본 인증에 대해 공부를 하다가 충격적인 사실 발견..제목그대로 사이트마다 아이디와 비밀번호가 같다면 자주 바꿔주는게 좋다. 그 이유는 오늘 공부내용으로 설명하겠다.

HTTP 기본 인증


  • 모든 데이터는 허가된 사람만이 데이터에 접근하고 업무를 처리할 수 있어야 함.

→ 그러기 위해서는 서버가 사용자가 누구인지 식별할 수 있어야 함. 이 때 사용하는 식별법이 HTTP의 자체적인 인증 관련 기능을 사용하는 것.

인증?


  • 내가 누구인지 증명하는 것.
  • 여권이나 운전 면허증 같은 신분즈을 보여주는 것 같이 내가 누구인지 증명해 보이는 것.
  • 이 세상에 완벽한 인증이란 없다. 누군가가 엿들을 수 있고, 신분증은 도둑맞거나 위조될 가능성이 있다.
  • 그렇지만 사용자에 대한 데이터는 그 사람이 누구인지 판단하는데 도움이 된다!

HTTP 인증 과정


  • 클라이언트 → 서버
    • 판매 예측 정보를 요청. (첫 번째 요청에는 인증 정보가 없음)
  • 서버 → 클라이언트
    • 비밀 재정 문서를 요청해 사용자 이름과 비밀번호를 요청함. (401 에러와 함께 보냄)
    • WWW-Authenticate: Basic realm=”Family”
    • realm: 기밀문서 보안 영역.
  • 클라이언트 → 서버
    • 판매 예측 정보 요청과 사용자 이름, 비밀번호를 보냄. (+Authorization 헤더)
    • Authorization: Basic YnJpWW4Tdg90dkkeow6T3
  • 서버 → 클라이언트
    • 200! 문서를 보내줌.

  • 이런 식으로 인증 과정은 크게 복잡하지 않다. 복잡하지 않은 만큼 보안이 좋지 않다는 단점도 있다. 그래서 인증요구에 대한 응답을 암호화해서 보내는 방법이 있다.

Base-64 인코딩


  • 위에 HTTP 인증 과정에 보이는 헤더들에 Basic 하고 뒤에 알 수 없는 문자로 쓰여져 있는게 있다.
  • 그 문자들이 인증 과정중에 아이디와 비밀번호가 합쳐저서 Base64방식으로 인코딩 과정을 거쳐서 암호화 된 것이다.
  • 예를 들어, 아이디가 hello 비밀번호가 password라고 한다면?
  • BASE64ENC (hello:password)wkj2SaEridksCGgic2340dD 이런식으로 바뀜.
  • Base64 인코딩은 바이너리, 텍스트, 국제 문자 데이터 문자열을 받아서 전송할 수 있게, 그 문자열을 전송 가능한 문자인 알파벳으로 변환하기 위해 발명됨.

보안 결함


  • base64 인코딩은 쉽게 디코딩 될 수 있다.
    • 전송가능한 문자를 반대로만 해석하면 되기 때문에 종이와 연필만 있어도 가능한 문제라서 아무나 손 댈 가능성이 있음.
    • 그래서 사실상 비밀번호 그대로 보내는 것과 다름없음.
  • 개인 컨텐츠화 된 작은 사이트.
    • 보통 사람들은 기억하기 쉽게 모든 사이트의 아이디와 비밀번호가 비슷하다.
    • 하지만 이런 짓은 아무리 보안이 좋은 사이트에게도 치명적인 결함이 된다.
    • 보안벽이 낮은 사이트의 사용자 이름과 비밀번호가 캡쳐된다면 그것으로 모든 사이트에 대입할 가능성이 있기 때문.
  • 기본 인증은 가짜 서버에 취약함.
    • 기본 인증은 그냥 요청을 보고 일치하면 정보를 제공해 주는 기능만 있기 때문에 서버를 분간하는 능력이 없다.
    • 그래서 누군가 악의적으로 가짜 서버와 연결시켜서 사용자에게 비밀번호를 요청하는 일이 생길 수 도 있음.

후기


기본 인증은 그냥 사용자를 인증하고 데이터 전송하는데는 편리하지만 보안이 취약한 곳에서 사용할 경우나 중요한 문서, 극비사항 정보를 다룰 경우엔 SSL과 연계하거나 다이제스트 인증을 다루는 것이 좋을 것 같다.

0개의 댓글