비밀번호 관리 얘기를 꺼내는 이유가 있습니다. 지난달에 오래 안 쓰던 쇼핑몰 계정에 로그인하려다가 비밀번호를 까먹어서 재설정을 눌렀는데, 새 비밀번호를 만드는 그 3초 동안도 결국 늘 쓰던 패턴을 그대로 반복하고 있는 저를 발견했습니다. 이름 뒤에 느낌표 하나, 숫자 몇 개. 이 블로그를 운영하면서 워드프레스 관리자 계정, 서버 접속, API 키 같은 걸 다루다 보니 이제는 이런 습관이 진짜 위험할 수 있겠다 싶어서, AI를 활용해서 비밀번호를 제대로 관리해보기로 하고 그 과정을 정리해봅니다.
챗지피티에 비밀번호를 만들어달라고 하면 안 되는 이유
제일 먼저 든 생각은 “그냥 챗봇한테 무작위 비밀번호를 만들어달라고 하면 되지 않을까”였습니다. 실제로 해봤는데, 결과 자체는 그럴듯했습니다. 대문자, 소문자, 숫자, 특수문자가 섞인 16자리 문자열을 몇 초 만에 받았으니까요. 그런데 곰곰이 생각해보니 이 방식에는 근본적인 문제가 있었습니다. 그 비밀번호가 대화 기록 어딘가에 남는다는 점입니다. 서버에 저장되는 방식이나 보관 기간을 제가 통제할 수 없는데, 거길 거쳐서 나온 문자열을 그대로 은행 계좌나 관리자 페이지에 쓴다는 게 찜찜했습니다. 실제로 이 부분을 검색해보니 보안 전문가들도 대체로 같은 이유로 챗봇에 비밀번호 생성을 직접 맡기지 말라고 권고하고 있더군요. 그래서 방향을 바꿔서, AI에게 비밀번호 자체를 만들어달라고 하는 대신 “안전한 비밀번호의 조건이 뭔지, 그리고 그걸 로컬에서 직접 만들 방법”을 물어보기로 했습니다.
클로드 코드로 비밀번호 생성기를 직접 만들어봤습니다
이 블로그를 만들 때도 썼던 클로드 코드를 다시 켜서, 이번엔 브라우저에서 돌아가는 간단한 비밀번호 생성기를 하나 만들어달라고 부탁했습니다. 조건은 세 가지였습니다. 서버로 아무것도 전송하지 않고 브라우저 안에서만 계산이 끝날 것, 길이와 특수문자 포함 여부를 직접 조절할 수 있을 것, 그리고 무작위성을 확보하기 위해 `Math.random()`이 아니라 `crypto.getRandomValues()`를 쓸 것이었습니다. 사실 이 세 번째 조건은 제가 원래 알던 게 아니라, “자바스크립트에서 진짜 안전한 난수를 만들려면 어떤 함수를 써야 하냐”고 되물어서 알게 된 내용입니다. `Math.random()`은 예측 가능성이 있어서 보안 용도로는 부적합하다는 걸 이번에 처음 제대로 이해했습니다. 코드 자체는 순식간에 나왔는데, 저장이나 전송 없이 화면에서 즉시 생성되고 새로고침하면 사라지는 구조라 마음이 한결 편했습니다. 만드는 데 걸린 시간은 테스트까지 합쳐서 20분 정도였고, 예상보다 훨씬 빨리 끝나서 오히려 좀 허무했던 기억이 납니다.
비밀번호 관리자 앱, 결국 병행하기로 했습니다
비밀번호를 아무리 잘 만들어도 그걸 다 외울 수는 없는 노릇이라, 무료 비밀번호 관리 앱도 하나 같이 써보기로 했습니다. 처음엔 브라우저 자체 저장 기능만으로 충분하지 않을까 싶었는데, 컴퓨터를 바꾸거나 다른 브라우저를 쓸 때마다 매번 새로 입력해야 하는 게 번거로웠습니다. 그래서 별도 관리자 앱을 설치해서 직접 만든 비밀번호를 저장해봤는데, 자동 입력 기능이 생각보다 편해서 이제는 새 계정을 만들 때마다 이 조합을 씁니다. 먼저 방금 만든 생성기로 비밀번호를 뽑고, 그걸 관리자 앱에 저장하는 식입니다. 서비스마다 파일 형태로든 클라우드 형태로든 데이터를 어딘가에 저장하게 되는 건 마찬가지라, 완벽하게 안전하다고 말하긴 어렵겠지만 적어도 같은 비밀번호를 여기저기 재사용하던 예전 습관보다는 훨씬 나아진 셈입니다.
막상 써보니 진짜 문제는 습관이었습니다
생성기도 만들고 관리자 앱도 깔았는데, 정작 가장 어려웠던 건 기존에 쓰던 계정 열 몇 개의 비밀번호를 하나하나 바꾸는 일이었습니다. 도구는 순식간에 준비됐는데, 실제로 은행, 이메일, 각종 구독 서비스에 들어가서 비밀번호를 교체하는 데는 주말 오후를 거의 다 썼습니다. 중간에 두 번이나 로그인이 풀려서 본인 인증 문자를 다시 받아야 했던 것까지 생각하면, 도구를 마련하는 것과 실제로 습관을 바꾸는 것 사이에는 꽤 큰 간극이 있다는 걸 새삼 느꼈습니다. 그래도 다 끝내고 나니 적어도 중요한 계정들만큼은 서로 다른, 예측 불가능한 비밀번호를 쓰고 있다는 사실만으로도 마음이 훨씬 가벼워졌습니다.
이번에 정리하면서 남겨두고 싶은 요령입니다.
- 비밀번호 자체를 챗봇 대화창에서 직접 생성하지 말고, 브라우저에서 로컬로 동작하는 생성기를 쓸 것
- 자바스크립트로 직접 만든다면 `Math.random()`이 아니라 `crypto.getRandomValues()`를 쓸 것
- 생성기와 별개로 비밀번호 관리자 앱을 병행해서 재사용을 원천적으로 막을 것
- 도구를 준비하는 것보다 기존 계정을 하나씩 교체하는 데 훨씬 시간이 걸린다는 걸 감안하고 여유 있게 일정을 잡을 것
