서론
DU Attend 는 QR코드를 미리 휴대폰에 저장해두고 앉은자리에서 편리하게 출석체크 해 주는 서비스입니다.
시대의 흐름에 따라 개인정보의 중요성이 커져가면서 본인의 데이터가 안전한지 궁금해하는 사용자들이 많습니다. 서비스를 만드는 입장에서는 귀찮아할 일이 아니라 데이터 관리를 어떻게 하는지 적극적으로 알려드려야 할 부분 같습니다. 이러한 문화가 많이 퍼졌으면 좋겠습니다.
수집하는 식별정보
DU Attend 서비스에서는 사용자의 정보를 최소한으로 수집합니다. 순수 무료 목적으로 만들어졌기 때문에 다음과 같은 정보만 수집합니다.
- 아이디 -> 학번으로 유도
- 암호
DU Attend 서비스에서 다른 서비스들과 다른 점은 아이디를 학번이랑 동일하게 해야 합니다.
사실 학번을 사용하지 않고 무작위 8자리 숫자를 사용해도 됩니다. 학번을 사용하는 이유는 출석 시스템에서 학번을 사용하기 때문입니다. 무작위 8자리로 가입하거나 다른 사람의 학번으로 가입하게 되면 출석 기능이 제대로 동작하지 않을 것 입니다.
출석 QR과 관련된 정보는 나중에 다른 글로 정리하겠습니다.
암호는 tigers(종합정보시스템) 암호가 아닙니다. DU Attend 에서 개별적으로 사용하는 암호입니다. 현재 암호 정책은 최소 4자리 최대 36자리 로 제한하고 있습니다. 숫자 4자리로 해도 되지만 좀 더 강력한 암호를 사용하시면 좋겠습니다. 암호의 중요성은 잘 아실 거라 생각합니다.
암호 저장방법
암호 정보는 해시 함수를 사용하여 저장합니다. 해시 함수란 위키백과에 잘 정리되어 있습니다.
해시함수(hash函數)는 하나의 주어진 출력에 대하여 이 출력으로 사상시키는 하나의 입력을 찾는 것이 계산적으로 불가능하고, 하나의 주어진 입력에 대하여 같은 출력으로 사상시키는 또 다른 입력을 찾는 것이 계산적으로 불가능하다는 두 가지 성질을 만족하면서 임의의 비트열을 고정된 길이의 비트열로 사상시키는 함수이다.
한마디로 입력값을 해시 함수에 통과시키면 무작위 문자로 보이는 결과물이 출력됩니다. 해시 함수는 출력값으로 입력값을 유추할 수 없어야 합니다.
그리고 해시 함수의 알고리즘은 널리 알려져 있습니다. 알고리즘이 공개되어 있어도 많은 곳에서 사용한다는 것은 안전하다는 뜻이기도 합니다.
DU Attend 에서 사용하는 해시 함수는 bcrypt 입니다. bcrypt 의 장점은 많은 언어에서 구현되어 있어 사용하기 편리하고(개발 속도가 빠르고) 아직 알려진 문제가 없다는 점 입니다. 그리고 해시를 생성할 때 마다 다른 출력값이 나온다는 점 입니다.
https://bcrypt-generator.com/ 에서 쉽게 해볼 수 있습니다. 아무 값이나 입력하고 Encrypt 버튼을 여러번 눌러 보세요. 생성할 때 마다 다른 값이 나옵니다. 자주 쓰는 패스워드를 해커가 알고 있어도 같은 결과값을 찾기는 불가능에 가깝습니다. 이것을 salt 라고 하는데요… 여기에서 보시죠.
https://ko.wikipedia.org/wiki/%EC%86%94%ED%8A%B8_(%EC%95%94%ED%98%B8%ED%95%99)
이런 방법으로 암호를 저장하면 안전합니다. 하지만 아직 많이 남았습니다.
암호 정보의 흐름
로그인 페이지에 암호를 입력하고 로그인에 성공하고 메인페이지를 보기까지 서버에서는 많은 일이 일어납니다.