Day 18 개발일지 Web - boostcamp-2020/Project03-A-TOTP GitHub Wiki

개발일지

TOTP 6자리 검증 API

로그인, 비밀번호 찾기 등에서 입력된 TOTP 6자리를 검증하는 API를 만들기위해 전날 구현했던 totp 6자리를 만들어주는 함수를 사용하여 6자리를 검증하도록 빠르게 구현했다.
하 지 만
누가 빠르다고 했나 .. 여기서 부터 늪에 빠졌다. Secret Key의 경우 crypto로 RandomByte를 생성 후에 buffer로 반환해주기 때문이었다 .. 이 문제를 확인하고 대처한 방안은 바이트 값을 `1 ~ 9, a ~ z' 의 값으로 바꿔 문자열로 바꿔줘서 Secret Key를 만들었다. 그 코드를 보자면

makeSecretKey(length = 20) {
    const bytes = crypto.randomBytes(length || 32);
    const set = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz';
    let output = '';
    for (let i = 0, l = bytes.length; i < l; i++) {
      output += set[Math.floor((bytes[i] / 255.0) * (set.length - 1))];
    }
    return base32.encode(output).replace(/=/g, '');

이렇게 byte값을 연산하여 set의 값중 하나의 값이 될 수 있도록 구현하였다. 이부분에 생각보다 많은 시간을 뺐겨서 비밀번호 찾기 페이지는 이따 저녁으로 미뤄둬야했다 ㅎㅎ

회고

진구

또 !! 또 !!! API를 사용하면서 허술했다 !!!!!!!! 이놈의 허술병을 좀 더 보완하자는 생각을 하게 되는 날이었다. 그리고 이제 TOTP trncate 구현은 다 되었으니, HMAC, BASE32 를 직접 구현하면 좋을 것 같다는 생각을 했다 ! 방법을 알고있으니 다음은 부딪혀보는 것 뿐이다 ㅎㅎㅎ ( 시작하기전에 한번 더 문서 꼼꼼히 읽어보기 !)

도경

일단 회원가입, 로그인, 아이디찾기, 비밀번호 변경까지 구현해서 데모 때 보여줄 게 생겨서 다행..

석암

당장 데모때 보여줄 수 있는 부분의 개발이 완료되어서 다행이라고 생각이 되었다. 더해서 이메일에 어떤 정보가 담긴 URL 을 넘겨줘야 하는지에 대한 고민 또한 많이 있었다. 이에 따라 URL param에 정보를 담아서 보내는 방식과 만료시간과 암호화를 통해 FE 에서 조차 내용을 확인하지 못하고 서버에서만 확인 가능하게 진행하였다.

추가로 생각해보면 TOTP를 새로 구성할때에는 어떤 방식으로 진행해야 할지 고민이 되는 부분이 있다. 그냥 간단하게 key 정보를 넘겨서 구하는 방법도 가능하다고 고려는 된다.