client side 에서의 해싱이 일반적이지 않게 된 건 보안의식 상향과 SSL의 일반화가 절묘하게 맞물린 결과지 client side hashing이 무의미해서가 아님. 단순히 생각해 보면 서버 입장에서는 평문 비밀번호나 클라이언트에서 해싱한 비밀번호나 다를 게 전혀 없으므로 어느 쪽을 탈취하게 되든 똑같이 계정을 탈취할 수 있다고 생각할 수 있겠지만 실상은 조금 더 복잡함.
1. 우선 평문 비밀번호가 탈취되는 것과 해싱된 비밀번호가 탈취되는 건 완전히 다른 유형의 사고임. 해싱된 비밀번호가 탈취된다면 같은 해싱 알고리즘을 클라이언트에서 사용하는 서비스들에서만 로그인을 시도해 볼 수 있겠지만, 평문 비밀번호가 털린다면 해당 사용자가 이용하는 모든 서비스에 평문 비밀번호를 대입해 볼 수 있음. 물론 서비스마다 비밀번호를 모두 다르게 쓰는 사용자 풀이라면 아무 문제 없겠지만 이게 가능할 리는 없음.
2. SSL이 일반화되기 전까지는(사실 꽤 최근까지도) 보안 의식이 매우, 매우 미비했었음. 비밀번호를 평문으로 저장해서는 안 된다는 걸 지키지 않는 곳도 적지 않았었고, 이는 대기업도 마찬가지 였던 것으로 보임. 꽤 최근(2019년)에도 페이스북이 비밀번호 수억개를 평문으로 저장해 왔음을 실토했었음. (https://krebsonsecurity.com/2019/03/facebook-stored-hundreds-of-millions-of-user-passwords-in-plain-text-for-years/)
3. 보안의식 상승과 함께 SSL이 일반화됐고, 비밀번호 평문 저장 금지 원칙 역시 함께 일반화됐음. client side hashing 사례를 찾아보기 쉽지 않은 건 아마 이게 주 원인이 아닐까 싶음. 평문으로 전송하고 평문으로 저장하던 방식에서 바로 믿을 수 있는 통신 방식으로 평문을 보내고 해싱해서 저장하는 방식으로 넘어갔으니, 믿을 수 없는 통신 방식으로 해싱된 걸 보내고 이걸 다시 해싱해서 저장하는 방식을 찾아보기 힘들게 된거 아닐까 싶음.
4. 결정적으로 비밀번호 저장 단계에서 해싱을 거친다고 해도, 간단한 실수나 설계 오류로 클라이언트에서 받아온 평문 비밀번호가 어딘가 기록될 가능성이 있음. Github에서도 클라이언트에서 받아온 평문 비밀번호를 로그로 저장한 사고가 터진 바 있었음. (https://www.bleepingcomputer.com/news/security/github-accidentally-recorded-some-plaintext-passwords-in-its-internal-logs/)
사실 지금도 카페 같은 곳에서 ARP Spoofing 걸어놓고 http 패킷들을 살펴 보면 평문으로 날아다니는 누군가의 비밀번호를 심심치 않게 발견할 수 있을거임. (당연히 범죄니까 진짜로 해 보는 깃붕이는 없기를 바라겠음) 대학교 구닥다리 LMS들이 이 쪽으로 특히 취약한 거 같으니 깃붕이들은 특별히 조심해서 쓰도록 하자.
해싱할 키의 안전성은 어떻게 확보하는거임? 그냥 세션별 nonce 같은거 쓰나 - dc App
애초에 안전할 필요가 있음? - dc App
키가 안전하지 않으면 해싱하는 이유가 뭐임 - dc App
그냥 패퍼 하나 뿌려놓으면 다른 사이트에서는 못쓰니까
어짜피 키도 털리는데 그럼 페퍼친거 복구해서 원본 털면 되는거 아닌가 - dc App
키가 필요하다는거 자체가 예외사항이라 걸림돌이니 없는거보단 낫긴한듯 - dc App
아래글썻는데 걍 ㅁ제대로 아는놈없는 ㅂㅅ들뿐이더라 병신갤러리 다신 질문안한다
ssl 대중화된 시대에 맞지않는 개소리 ㅅㄱ
예 뭐 하세요 그럼
하지 말란 것도 아니고 큰 의미가 없다한것뿐인데 이렇게까지 발광하는건 지말에 적극적으로 동의하는 사람이 있기를 바래서인가?
보안의식 상승과 함께 SSL이 일반화됬으니까 별 의미 없다는거야 여태 보안이랍시고 엑티브엑스 떡칠해놓고 ssl도 안하는 꼬라지들을 봐놓고도 이런소리를 하는거야?? 쌉소리 할시간에 하라는것들부터 똑바로 하자
글 읽긴 했노?
읽었으니까 이런반응을 하지 Ssl을 쓴다는걸 명시안했다고?? 표준이란 개념이 없냐고
니말대로 일반화가 되었고 지금은 Ssl을 안쓰는게 비정상이야
4번 같은 이유 때문에 하는것도 나쁘진 않음. 현업에서 PoC 구현하면서 임시로 비번을 해쉬해서 쓰기도 함. 그래야 실수로 로그에 기록되던 깃허브에 저장되도 평문 비밀번호는 적어도 안 남으니까.
응 필요업어
애초에 베스트는 사용자가 랜덤 패스워드 쓰도록 유도하거나 OAuth나 OTP only로 가는 게 맞지 않냐? 클라 해싱이 무의미한 건 아니지만 진짜로 보안을 추구하는 거면 다른 고려해볼만한 옵션이 꽤 있다고 보는데
2 3은 전부 HTTPS 위에서 굴러가는 최근 웹서비스와 무관한 얘기같고 1은 클라 해싱의 의의로 작용하려면 서버단 해싱이 무효화됨을 전제해야 해서 실질적으론 4 말곤 근거로 들기 애매하다고 봄... 물론 4가 중요하지 않단 건 아닌데 좀 불필요한(상식적인) 내용은 빼고 주장하는 게 낫지 않나 싶음
1 2 3은 웹 서비스에서 client side hashing 사례를 찾아보기 힘들게 된 이유지 client side hashing을 꼭 써야하는 이유가 아님. 본인이 글을 애매하게 쓴 건지 SSL 통신을 쓰는 웹서비스에서도 client side hashing 을 꼭 써야 한다고 이해하는 사람이 많노
개인적으로는 4번을 생각 하더라도 SSL을 쓰는 환경이면 client side hashing을 굳이 할 필요는 없다고 생각함. 다만 원글 작성자가 SSL을 쓴다는 걸 명시하지 않았으니 게임 클라이언트나 http통신 같은 걸 생각해서 1번을 굳이 길게 추가해 둔거임
난 새로 개발되는 프로그램이라면 보안이 필요한 내용을 통신할 땐 어디든 간에 당연히 암호화 프로토콜을 쓰는 게 정상이라 생각하고 이게 일반적인 인식일 거라 추가하려면 예외 케이스를 명확히 적었다면 좋았을 것 같음
이건 어디까지나 개발자 양심이 뒤틀린경우잖음. 그런 논리라면 세상에 안전한건 하나도없어 - dc App
Ssl은 심지어 국내법으로 규정된 보안표준임. 그걸 안하고 보안이랍시고 뭘 한다?? 개소리
비밀번호 평문저장 불법 개인정보 사용시 보안프로토콜 미사용도 불법 법에 명시된 최소한부터 지킵시다 그걸 기본으로 깔고 더 높은 보안수준을 얘기하는거지 기본도 안하는걸 가정하고 보안이 어쩌구 저쩌구는 개소리야
그렇다면 client side hashing은 논의 되어서도 안 될 "금기어"인가? -> 니 말대로 개인정보를 입력받는 사이트는 정통법에 기반해 무조건 접속기록 위변조 방지 대책을 갖춰야 함. 다만 SSL 인증을 사용할 수 없는 레거시 환경이라면? 마지막에도 적어 놨듯이 아직도 http 통신으로 버티고 있는 LMS같은 것들이 적지 않을거임. 이런 서비스들에 대해서는 1번과 같은 이유로 client side hashing이 분명 유효할거임
SSL을 사용하도록 고치는 게 최선이겠다만 이게 아주 쉬운 건 아니니 별 수 없지 않겠노? 최소한 SSL을 쓰게 만드는 작업이 끝나기 전까지는 클라이언트에서 먼저 해싱을 한 번 해서 보내도록 고쳐 놓는 게 최선일거임
니가 마지막에 싼 댓글은 너도 아니라 생각해서 지운 거 같은데, 정통법과는 별개로 "오버 엔지니어링이다"라고 따져 들어가기 시작하면 남을 게 뭐가 있겠음? 4번은 그저 "아무 의미 없는 건 아니다" 정도지 "휴먼에러는 매우 위험하니 클라이언트 해싱 역시 필수화 하자"가 아님
해당 댓글은 삭제되었습니다.
SSL이 표준이며 SSL을 사용하는 환경에서는 client side hashing이 큰 의미를 가지지 않는가? -> 최소한 본인은 동의함. 본문은 그저 SSL 일반화와 보안인식 상승이 절묘하게 맞물린 결과 client side hashing을 했던 사례를 찾아보기 힘들게 된 이유를 추측해 본 것 뿐임.
국내에 도입되었으면 무지성 MD5로 전송해서 중간에 가로채면 비번없이 해시만으로 탈탈 털릴듯
근데 사이트 다 달라도 비번 똑같이 씀?
개인 보안의식은 다다른데 뭔 남보고 비번 똑같이 쓰냐고 이딴소리를함
https자체의 패킷 안정성 외적인 부분의 탈취가능성 생각하면서 인증 구현하면 (서버단 암호화, 2fa, db단 해시대조 스타일로 변경+클라이언트단 otp화 crypto 스타일 해싱 적용등등) 로그인이라는 영역이 코딩에서 제일 구현하기 어려운 부분이 되버림... 이건 해봐야 깨닫는 영역ㅋㅋㅋㅋ 그냥 oauth api 대기업꺼 모듈로드해서 메뉴얼대로 구현하고 만일 털리면 응 느네탓~ 안하면 아마 로그인 연구만 몇년할껄..ㅠ
본문의 이유로 무의미하진 않은데 해싱을 클라단에서 처리하는 방식의 트레이드는 해싱 알고리즘이란 세부 사항이 노출된다는 점이지. 그럼 나중에 해싱 알고리즘을 바꾼다면(물론 자주 있을 일은 아니지만 이건 컴퓨터 성능에 영향받는 일이라 필연적으로 존재하게 되는 일이기도 함) API가 깨지는 게 되기도 함. 굳이 해싱을 안 쓰는 이유를 찾자면 이게 있을 거라 생각해 봄. 어차피 요샌 윗 댓글처럼 3자 인증이 대부분이라 나는 구현하면서 깊게 생각 안 해봤지만.