사이트마다 하나씩 있는 기능이 바로 "비밀번호 찾기"이다.
그러나 이름과 다르게 "비밀번호 찾기"를 누르면 원래 비밀번호를 찾아주는게 아니라 항상 재설정을 해야 한다.
왜 그럴까?
그건 서버가 비밀번호를 저장하는 원리에 있다.
만약 회원가입을 할 때, 입력한 비밀번호를 원본 그대로 서버에 저장한다고 생각해보자.
사용자가 비번을 치면 서버는 서버의 파일에 저장되어있는 비번과 대조할 것이다.
만약 해커가 서버를 털어서 비번파일을 알아냈다고 가정하자.
해커는 알아낸 비밀번호를 이용해 사이트에 로그인을 시도할 것이고, 당연히 로그인에 성공하게 될 것이다.
따라서 서버에 저장된 비밀번호가 저장된 파일이 해커에게 털린다고 해도 안전하게 저장할 방법이 필요하다. 그래서 비밀번호를 저장하는 서버는 절대로 원본 비밀번호를 저장하지 않는다.
원본 비밀번호를 저장하는 대신, 서버는 한번 비밀번호를 암호화 한 뒤 저장한다. 서버가 비밀번호를 암호화 할 때는 해쉬라는 것을 이용한다. 해쉬를 이용하면 암호화는 가능하지만 복호화는 불가능하다. 즉 암호화된 비밀번호를 원래 비밀번호로 되돌리는 것은 무슨 수를 써도 불가능하다는 것이다. (수학적으로 불가능하다. 다만 이를 회피하는 법은 있는데 엄밀한 설명은 생략한다. 일단 최신 암호화 방식으로는 불가능하다고 알고있으면 된다.)
예를 들어 burari1234라는 비밀번호를 암호화하면 c6a2d7f213d3654b7bf61fdfbba34b0b471768edd7ab51fd991ea00f53c28ef0라는 문자열이 된다. 그런데 위 문자열을 가지고 원래의 burari1234를 알아내는 것은 불가능하다.
이제 서버의 비번 파일에 원본 비번 대신 암호화한 비번만 저장한다고 가정하자. 사용자가 로그인을 시도할 때 마다 사용자는 서버에게 원본 비밀번호를 넘긴다. 서버는 전달받은 원본 비밀번호를 즉석에서 암호화 한 후 저장된 암호화된 비번과 대조한다. 만약 동일한 비번이라면 암호화된 문자열도 동일할 것이다. 전달받은 원본 비밀번호는 대조가 끝나는대로 바로 삭제해버린다. (원본 비번을 전달받는것은 동일하지만 이를 파일로 저장하지 않는다.)
만약 해커가 비밀번호가 저장된 파일을 가진다고 해도 암호화된 비밀번호를 알게되는 셈이니 소용이 없다. (사실 원본 비밀번호를 단순히 암호화 하는 것에도 문제가 있기 때문에 실제로는 salt라고 여기에 추가적인 보호기법을 더 도입한다. 자세한건 검색ㄱㄱ)
서버에는 암호화된 비번만 저장되어있기 때문에 서버도 사용자의 원본 비밀번호를 전혀 알지 못한다. 그러므로 원래 비밀번호를 사용자에게 알려주지 못하는 것이다. 만약 원래 비밀번호를 알려주는 사이트가 있다면 그건 원본 비밀번호를 서버에 저장한다는 의미이다.
비밀번호를 암호화하는 것은 가장 기초적인 보안 수단이며, 국내에서 서비스하는 모든 사이트들은 이를 의무적으로 적용해야 한다. 그렇기에 비밀번호의 원본이 유출된다는 것은 이런 기초적인 보호수단도 적용해놓지 않았다는 소리이다.
웃기게도 불과 5년 전 페이스북이 무려 6억명의 비밀번호를 자사 데이터베이스 내부에 원본으로 저장해놓고 방치했단 사실이 알려저 큰 파문을 일으켰다.
https://www.bbc.com/korean/news-47663169
그러므로 비밀번호 찾기를 눌렀을 때 원본 비번을 안알려준다고 해도 보안조치 때문에 그런 것이니 너그러이 넘어가주자.
3줄 요약
1. 보통 비번 까먹었을 때 비밀번호 찾기를 누르면 원래 비번을 알려주는게 아니라 비밀번호를 재설정해야 함.
2. 그 이유는 비밀번호를 저장할 때 암호화를 하기 때문이며, 이 때문에 서버는 원본 비밀번호를 전혀 알지 못함.
3. 만약 비밀번호 찾기를 눌렀을 때 원본 비번을 알려주는 사이트가 있다면 암호화를 하지 않는다는 뜻이며, '고객님 정보 털려도 나 몰라요~'하는 막장 사이트라고 보면 된다.
작성자 비번은 burari1234...
아하 암호 초기화 안해주는 사이트는 다 탈퇴 해야 한다는 뜻이군
스타보이ㅠㅠㅠ
레인보우 테이블이라고 흔히 쓰는 password같은 쉬운 비밀번호를 모아둔 자료가 있음 이건 해쉬같은거랑 상관없이 그냥 하나씩 직접 로그인시도를 해보는 브루트 포스 기법에 쓰임 대문자 특수문자를 안 섞으면 레인보우 테이블에 올라가있는 쉬운 패스워드일 가능성이 높아져서 그럼
서버는 전달받은 비밀번호를 즉석으로 암호화해서 대조해봄. 만약 같은 비번이라면 암호화도 같겠지. 그리고 전달받은 원본 비밀번호는 대조가 끝나는 즉시 삭제해버림
그거는 암호화 하는 경우에도 기존 비번과 같은지 아닌지 대조할 수는 있으니 상관은 없음
기억도 못할거 때려치라는 이유가 아니였구나..
아하 암호 초기화 안해주는 사이트는 다 탈퇴 해야 한다는 뜻이군
해시함수와 해시테이블이라고 검색하면 더 자세한 원리들이
작성자 비번은 burari1234...
스프로울
근데... 내가 넣은 비밀번호가 맞는지는 어떻게 알어? 서버에는 암호화 된 배열만 기록되있다며
서버는 전달받은 비밀번호를 즉석으로 암호화해서 대조해봄. 만약 같은 비번이라면 암호화도 같겠지. 그리고 전달받은 원본 비밀번호는 대조가 끝나는 즉시 삭제해버림
나가 비밀번호를 입력하면 암호화를 해서 결과갚을 알 수 있지. 그 결과값이 서버의 암호화된 배열과 같으면? 로그인이 되고.
똑같은 해시함수를 거쳐서 같은 암호화된 배열이 뜨겠지
해쉬의 장점임. A를 넣었을때 결과값은 뭐가 나올지 예상 불명이고 그 결과값으로 A값을 도출할 수 없지만 A를 넣었을때 결과값은 항상 똑같이 나옴. 그래서 비밀번호를 쳤을때 그걸 변환한 해쉬값이 서버에 암호화 된 값이랑 똑같이 나오면 통과.
그럼 저 해시함수 라는건 회사 내부직원은 알겠네? 저걸 털리면 회사 절딴나는거구나
해시함수는 공개된 알고리즘이라 괜찮아. 수학적으로 단방향으로만 암호화가 가능하도록 설계가 되어있어. 단 취약점이 존재할 수도 있는데, 그래서 각국 정보기관/대학/기업에서 지속적으로 해시함수를 개발중임.
그나마 저 함수 자체를 가져간다고 해도 결과값으로 역함수를 만들어내는건 절대 쉽지 않다는거지. 그래서 털린걸 알게 되었을 때 대응할 시간을 어느정도 벌 수 있고.
보통 해싱은 공개된 알고리즘을 통해서 함. 해시함수를 안다 해서 해시에서 원문을 찾아낼순 없음. 해시함수가 "10으로 나눈 나머지"라면 5라는 해시가 있을 때 원문이 5일지 15일지 65535일지는 아무도 알 수 없거든
알아도 저장된 값이랑 대조해서 원본 역산이 불가능하니까 털려도 바로는 지장 없음. 다만 깠는데 취약점 발견된 해시라던가 이러면 문제가 생기는거.
요즘 비밀번호 암호화는 솔트처리라고 해서 비밀번호에 특정한 문자열을 덧붙이고 서버에서 사용하는 비밀키를 사용하는 알고리즘으로 몇백번 해싱 같은 방식을 사용해서 어디 한군데가 유출돼도 비밀번호 원문을 알기는 힘들기도 하고
이거 보니까 역방향으로 추론이 불가능하다는 소리가 바로 이해되네...
삭제된 댓글입니다.
[삭제된 댓글의 댓글입니다.]
!
레인보우 테이블이라고 흔히 쓰는 password같은 쉬운 비밀번호를 모아둔 자료가 있음 이건 해쉬같은거랑 상관없이 그냥 하나씩 직접 로그인시도를 해보는 브루트 포스 기법에 쓰임 대문자 특수문자를 안 섞으면 레인보우 테이블에 올라가있는 쉬운 패스워드일 가능성이 높아져서 그럼
!
직설적으로 말하자면 사람들이 평균적으로 3대대1!같은 비밀번호를 쓰는 경우가 대부분이라 그럼
음 지식이늘었다
스타보이ㅠㅠㅠ
비밀번호 재설정 했는데 "기존 비밀번호와 같은 비밀번호는 사용할 수 없습니다" 뜨면 런하란거지?
기존 비밀번호의 암호화랑 매칭하는거니 아니지
그거는 암호화 하는 경우에도 기존 비번과 같은지 아닌지 대조할 수는 있으니 상관은 없음
지식이 늘었다.
그거는 아님 님이 예전비번하고 같은걸 입력하면 똑같이 암호화된거지, 그 예전 비밀번호가 뭔지는 여전히 모름
참고로 유명한 클라우드서비스 MEGA는 비밀번호 재설정 하는 순간 클라우드 파일 전체가 날아가니 혹시라도 잊어먹는 순간 ㅈ되므로 무조건 어딘가 메모를 해두던가 하도록 하자
https://m.boannews.com/html/detail.html?idx=78058&page=1&kind=1 그리고 메타(구.페이스북)은 코로나 터지기 직전에 암호 평문저장으로 유명했던 곳이다
넷마블 한글아이디되는 그쯤에는 진짜 비번 알려주고 그랬는데
혹시나 본인인증해서 가입정보가 일치하면 (암호화된)비밀번호가 알수있는 구조는 없을까? 무조건 저런식 아니면 본인인증하고 비밀번호 초기화되었다는 사이트 말고는 죄다 비밀번호를 암호화 안한다는거넹.
걱정할 필요가 없는게 울나라 사이트는 법적으로 암호화가 안된 원문을 저장하는거 자체가 법적으로 금지 입니다. 걍 걱정안해도 되요
어디였더라 페북이었나 좀크고 이름 있는 사이트 한곳은 재설정 하라고는 뜨는데 지금까지 사용한 모든 비번을 못쓰게 막던곳이 있었는데
지금까지 사용한 모든 비번의 해시값을 저장하면 되니까 문제될 일은 아님
아니 문제라는건 아님ㅋㅋ 그냥 이렇게까지 해야 하나 싶었거든 자주 까먹어서 자주 쓰던 비번들 다써먹고 이리 저리 새로 만드니까 너무 불편하더라고
난 공통비번 쓰다가 한번 털려서 포기하고 모든 사이트의 비번을 다르게 만든 후 패스워드 매니저에 전부 맡기기로 했어.. 알파고님 제가 이렇게 기계를 사랑합니다
네이버 시벨ㅋㅋㅋㅋㅋ 뭐만 하면 비인가로그인이라고 암호 차단 걸어서ㅋㅋㅋㅋㅋ
썰트가 없으면 항상 같은 비번이 나온다는 기막힌 사실
그래서 내가 실습할때 매번 비밀번호 잃어먹어서 SQL문으로 계정 다시 생성하지..
비슷한 문제로 비밀번호를 바꾸었는데 바꾸기 전 비밀번호라고 다른 비밀번호 입력하라고 한다면 위험하다 왜냐면 헤시값을 저장하는거고 이건 탈취가능성이 있으며 이걸 탈취해서 해시값 해석된 프로그램에 돌리면 비밀번호 복원이 가능하다. 그 많은 해시값을 어떻게 해석하냐고? 비트코인 체굴 원리가 헤시값 맞춰보기임
pow블록체인은 풀어볼 여지가 있게 난이도가 낮은 해시 알고리즘을 쓰니까 그런거고 단순히 이전 해시를 저장하는게 위험한 건 아님. 솔트처리를 어떻게 하느냐 얼마나 안전한 알고리즘을 쓰냐의 문제지
와!유익해요
그럼 말그대로 비번 찾기 라고 적으면 안되는거아님? 단어와 서비스가 결국은 다른거자나
예전에 비밀번호를 보관해서 진짜 찾아주던 시절의 명칭이 그대로 남은 거ㅋㅋ
우리들 아무것도 몰라요~ 하지만 당신이 전에 어떤 비번을 했는지는 압니다! 고로 그 비번 못씀!
오 신기하다
이런 프로그램 관련으로 동작의 이유나 원리 같은 거 모아놓은 책 같은 거 없을까요.
재설정할때 전에쓰던비번 못쓰게만드는게 제일빡침
집어치우고 동일문자나 특수문자 영어 대소문자 개같은 것 좀 집어치웠으면..아니 이용하는 사람이 또는 비밀번호 잃어버리는 사람이 인터넷이나 모바일에 익숙치 않은 사람이 얼마나 많은데..이번에 직원들 의무교육 아이디 비밀번호 찾기해주다가 아이피 차단 당하고 빡돌아서 비밀번호 다 통일시켜버린 사람
https://zdnet.co.kr/view/?no=20170809110258 실제로 특수문자, 대소문자를 규칙에 처음 도입한 사람이 굉장히 후회한다고 함. 특수문자를 넣기 보다는 단어수를 늘리고 예측 가능한 패턴을 줄이는게 훨씬 예방에 도움된다고.
알죠알죠 그 냥반..근데 우리나라 보안관리자들 개발자들도 알텐데 그렇게 하지 않는다는게 문제..그리고 올라가다 보면 결국 못알못 정치인들로 툭하면 이용하는 사이트 국회의원이 개인정보보호 어쩌고해면서 자료요구하고 더 강화해야는거 아니냐 개소리로 이젠 공인인증서 로그인이 아니라 2단계 인증까지 해야하는 초유의 사태고 진짜 시바꺼..
점점 조건이 빡세짐 시발롬들 예비군어플따위가 대문자도 요구하는거보고 개빡침