패스제로 사용 매뉴얼

패스제로원패스워드를 보고 만든 유사품이다. 원패스워드와 유사하게 랜덤 생성된 비밀 키가 로컬 컴퓨터에 저장되고, 이 비밀 키로 비밀번호들을 암호화해서 서버에 저장한다. 차이점은 원패스워드는 암호화된 데이터를 자체 서버에 저장하는 반면 패스제로는 드롭박스에 저장한다는 점이다.

원패스워드와 동일하게 서버에 저장되는 데이터가 암호화되어 저장되기 때문에 서버 관리자(패스제로의 경우 드롭박스)가 데이터를 악용하기 어렵다(물론 어차피 드롭박스가 사용자 데이터를 악용할 가능성은 없겠지만). 또한 암호화된 데이터가 서버에 저장되기 때문에 비밀 키를 복사해 두면 여러 컴퓨터에서 비밀번호 데이터에 접근할 수 있다. 패스제로는 오픈소스 소프트웨어이고 드롭박스는 2GB까지는 무료로 저장공간을 제공하기 때문에 완전히 무료로 사용할 수 있다.

하지만 원패스워드는 로컬 비밀 키가 유출되더라도 마스터 패스워드를 모르면 서버의 데이터에 접근할 수 없도록 서버에서 막을 수 있는 반면, 패스제로는 드롭박스에 저장된 데이터 접근에 필요한 비밀번호(API 토큰이나 리프레쉬 토큰 등)를 로컬 컴퓨터에 비밀 키와 함께 마스터 패스워드로 암호화된 형태로 저장한다. 그래서 로컬에 저장된 비밀 키를 얻으면 브루트 포스로 마스터 패스워드를 얻어내서 사용자의 비밀번호를 모두 볼 수 있게 될 가능성이 있다. 물론 마스터 패스워드를 PBKDF2로 해싱한 다음 그 값을 키로 로컬 정보를 암호화하기 때문에 마스터 패스워드가 충분히 강력하면 로컬 비밀 키를 얻더라도 마스터 패스워드를 얻어내는게 엄청나게 쉽지는 않을 것이다.

원패스워드처럼 사용자가 있지도 않고 유료도 아니기 때문에 사용성이 떨어지고, 내가 혼자 만들었기 때문에 코드가 충분한 검증을 거치지 않았다.

혹시라도 이 프로그램을 사용하고자 한다면 프로그램의 불완전성과 위험성을 충분히 인지하고 사용하시기 바란다.

프로그램은 코틀린으로 작성되어 있고, UI는 자바 Swing으로 만들어져 있다. 처음에는 SWT로 개발을 했었는데 SWT는 플랫폼별로 따로 빌드/배포해야하는 것이 마음에 안 들어서 접었다. 그 뒤에는 JavaFX로도 만들었었는데, 이번엔 자바에 모듈 개념이 들어가면서 JavaFX 프로그램은 실행하기가 귀찮게 바뀌어서 그냥 Swing으로 다시 만들었다. 결국엔 Swing도 JavaFX처럼 모듈이 분리될지도 모르겠지만 어쨌거나 현재까지는 제일 간편해서 좋다.

사용법

설치

일단 패스제로 최신버젼(현재는 0.2.0) jar를 다운로드 받는다. 다운로드 받은 jar 파일을 적당한 위치에 옮긴다. 별도로 설정하지 않으면 로컬 비밀번호가 jar파일과 같은 경로에 저장된다. 그 다음 커맨드 라인 창을 띄우고 jar 파일이 있는 위치로 옮겨서 java -jar <다운로드 받은 파일 이름; e.g. passzero-0.2.0.jar>을 실행한다. passzero.shpasszero.bat같은 파일을 만들어서 같은 폴더에 두면 좀 더 사용하기 편하고, 그 파일들을 시작 프로그램으로 등록해두면 더 편리하게 사용할 수 있을 것이다.

초기 설정

프로그램을 처음 실행하면 설정 화면이 나온다. 정확히는 로컬 비밀 데이터가 없으면 설정 화면이 나온다. 로컬 비밀 데이터는 기본적으로 프로그램이 실행된 디렉토리의 localInfo.p0라는 이름으로 저장되는데, 이 파일이 없으면 설정 화면이 나온다. 프로그램을 실행시키는 커맨드에 -l <파일 경로> 옵션을 추가해서 위치를 변경할 수 있다.

설정 화면

가장 위의 “Local Secret” 부분은 추후 로컬 키를 분실한 경우 복구를 위해 필요하니 어딘가 기록해두는 것이 좋겠다. 하지만 이 정보가 유출되면 암호화된 데이터를 열어볼 수 있기 때문에 파일로 저장하기보다는 인쇄해두는 등의 방식으로 보관하는 것을 권한다. (하지만 아직 이 값을 입력해서 로컬 키를 복구할 수 있는 기능이 없는건 함정..)

그 다음 이 화면에서 사용자가 입력해야 하는 것은 “Dropbox Authorization Code”, “Master Password”, “Verify Master Password” 등 세 개의 필드다.

  1. “Dropbox Authorize URI”를 복사해서 웹브라우저에 붙여 넣는다.
    • 드롭박스로 연결되면 로그인하고 “Passzero” 앱이 요청하는 권한을 승인한다.
  2. 드롭박스에서 앱에 권한을 승인하면 다음과 같은 페이지로 이동한다.

Dropbox Auth Code

  1. 이 화면의 텍스트박스에 있는 코드를 통째로 복사해서 “Dropbox Authorization Code”에 붙여넣는다.

  2. 잠시 후 “Dropbox Auth Status”가 “OK”로 바뀌는지 확인한다.

  3. “Master Password”와 “Verify Master Password”를 입력한다. 마스터 패스워드는 앞으로 패스제로를 사용할 때 항상 입력해야 하니 절대 잊지 않도록 한다. 마스터 패스워드는 10자 이상이어야 한다.

  4. “Generate Local Info”를 클릭한다.

패스제로는 기본적으로 내가(전준수가) 만든 passzero라는 이름의 드롭박스 앱으로 연동되도록 되어 있는데, 어차피 이 앱으로 연동해서 사용해도 본인 외에는 데이터를 볼 수 없으니 걱정하지 않아도 된다. 만약 이게 영 찝찝하다면 드롭박스 개발자 페이지에서 새로 앱을 만들고 “Dropbox App Key”와 “Dropbox Redirect URI”를 변경해서 사용한다.

이렇게 설정을 마치면 마스터 패스워드 입력 창이 뜬다. 앞으로는 패스제로 앱을 켜면 이 창이 나타날 것이다. 여기에 마스터 패스워드를 입력하고 엔터를 누르거나 Confirm 버튼을 누른다. 한가지 주의할 점은 비밀번호가 틀려도 비밀번호가 틀렸다는 메시지가 뜨지 않고 “Given final block …” 어쩌고 하는 오류 메시지가 뜬다는 점이다. 이런 메시지가 나오면 비밀번호를 틀렸다는 뜻이니 다시 확인해보자.

마스터 패스워드 창

오래된 버젼의 자바 VM에서는 고급 암호 알고리즘을 지원하지 않아서 “Illegal key size or default parameters”와 같은 오류가 발생하기도 한다. 미국에서 너무 강력한 암호 알고리즘은 수출할 수 없게 돼있는 뭐 그런.. 것이라고 들었던 것 같은데 여하튼 이런 경우엔 별도의 작업을 해주어야 한다. 찾아보니 최근 버전에는 이런 제한이 풀려서 문제가 없는 것 같지만 혹 문제가 생긴다면 이 블로그와 마스터 패스워드 창 아래의 “java home” 주소를 참고해서 문제를 해결하기 바란다.

비밀번호 관리

비밀번호 엔트리 목록 창

비밀번호 엔트리 목록 창의 왼쪽에 엔트리 목록이 나온다. 처음에는 리스트가 비어있을 것이다. 하단의 “New” 버튼을 클릭하면 새로운 엔트리를 만들 수 있다.

비밀번호 엔트리 생성 창

엔트리의 이름과 타입을 설정하고, “Add” 버튼을 눌러서 정보를 추가한 다음 “Create” 버튼을 누르면 생성된다. 오른쪽의 “-“ 체크박스를 체크하면 해당 내용은 삭제된다. 엔트리 추가를 취소하려면 “Cancel” 버튼을 누른다.

왼쪽에서 엔트리를 클릭하면 우측에 상세 정보가 나온다.

비밀번호 엔트리 상세 보기

비밀번호는 기본적으로 가려져서 표시된다. 내용을 보려면 “Show” 버튼을 눌러서 볼 수 있고, “Copy” 버튼을 누르면 클립보드로 비밀번호가 복사된다. 비밀번호는 30초 뒤에 클립보드에서 자동으로 삭제된다.

기존의 엔트리를 수정하려면 우측 하단의 “Edit this entry”를 클릭하고, 선택된 엔트리를 삭제하려면 “Delete this entry”를 클릭한다.

기타

원래는 디렉토리의 형태로 비밀번호 엔트리를 관리하는 기능도 생각했었다. 목록 상단의 “Personal”이 이 디렉토리 이름인데, 현재 디렉토리 관리 기능은 UI가 없기 때문에.. 일단은 무시하기로 하자.

디렉토리 이름의 오른쪽에 있는 새로고침 버튼은 표시되는 엔트리의 목록에 문제가 있을 경우 고칠 수 있는 버튼이다. 만약 로컬 키를 여러 컴퓨터에 복사해서 사용하는 경우에는 한쪽 컴퓨터에서 수정한 내용이 반대쪽 컴퓨터의 목록에 제대로 반영되지 않을 수 있다. 이럴 때 새로고침 버튼을 더블클릭하면 엔트리 목록이 업데이트된다. 단 목록 업데이트는 상당한 시간이 소요된다. 이는 Dropbox API가 꽤 느려서 생기는 문제로 현재로썬 해결책이 없을 것 같다.

Passzero UI를 실행하면 기본적으로 시스템 트레이 아이콘이 생기고, 그래서 창을 닫아도 프로그램이 종료되지 않는다. 프로그램을 종료하려면 시스템 트레이 아이콘을 클릭해서 나오는 메뉴에서 “Quit” 버튼을 클릭해야 한다.

마무리

오래전부터 해오던 케케묵은 사이드 프로젝트들을 어떤식으로든 일단락짓는.. 사이드 프로젝트를 하고 있다. 패스제로는 그 첫번째다. 여태 대충 만들어서 혼자 써오던 것인데 어떤 식으로든 end-to-end 사용자 플로우를 구현하고 사용 매뉴얼까지 써서 일단락짓는게 목표였다. 비밀번호라는 상당히 민감한 데이터를 다루는 프로그램인데 테스트도 거의 없는 어설픈 상태라 조금 걱정스런 맘이 없진 않지만 뭐.. 어차피 앞으로도 나 혼자 쓰게될 가능성이 높으니까 쓸데없는 노파심은 내려놓으려고 한다. 혹시라도 사용해볼 생각이 있다면 프로그램의 현재 상태를 잘 이해하고 사용하시기 바란다.

다음으로 정리할 프로젝트는 jparser다. 이건 코드 측면에선 정리를 하거나 미루고 있는 새 기능들을 추가하려고 하면 한도 끝도 없을 것 같아서 블로그에 관련 포스팅을 쓰는 것으로 갈음하려고 한다. 대충 틀만 잡아 봤는데 생각보다 할 이야기가 많아서 블로그 포스팅만 정리하는 것도 만만치는 않을 것 같다.

이 페이지에서 오류나 문제점을 발견하시면 이메일로 알려주시면 감사하겠습니다.
뒤로