웹 프로그래밍을 하다보면 회원가입과 로그인 기능을 구현하게 된다.

이때 비밀번호는 중요한 개인 정보로서 운영자도 알 수 없게 암호화하여 저장을 하는 것을 요구하고 있다.

여기서는 어떻게 하면 암호화하여 저장할 수 있는지 기술한다.

security.zip

첨부한 소스코드는 spring mvc 프로젝트로 만든 sample 코드이다.

파일 구성은 다음과 같다.

- HomeController.java : home()

  + 프로젝트가 시작되면 호출된다. home.jsp를 보여준다.

- home.jsp : 메인 화면으로 회원가입과 로그인에 대한 메뉴 버튼이 있다.

  + 회원가입 메뉴를 누르면 회원가입 입력창으로 이동

  + 로그인 메뉴를 누르면 로그인 입력창으로 이동

- joinForm.jsp : 회원가입 정보(아이디, 비밀번호)를 입력 받아 서버로 회워가입을 요청한다.

- HomeController.java : join() - GET

  + id와 pw를 입력 받고, pw를 암호화하여 임시로 저장하는 클래스에 저장한다.

  + joinSuccess.jsp를 보여준다.

- joinSuccess.jsp

  + 회원가입 성공을 알리고

  + 홈(메인)으로 이동하는 메뉴를 둔다.

- loginForm.jsp : 로그인에 필요한 정보(id, password)를 입력 받아 서버로 로그인을 요청한다.

- HomeController login() - Post

  + 로그인 정보 (id, pw)로 입력받은 것과

  + 임시로 저장한 암호화된 비밀번호를 가져와

  + 로그인 시 입력한 비밀번호와 암호화된 비밀번호를 이용하여 사용자에 대한 비밀번호 검증을 한다.

  + 성공하면 loginSuccess.jsp로 이동하고

  + 실패하면 loginFail.jsp로 이동한다.

- loginSuccess.jsp : 로그인 성공을 알리고, 홈으로 이동하는 메뉴를 보여준다.

- loginFail.jsp : 로그인 실패를 알리고 홈으로 이동하는 메뉴를 보여준다.

- Utilities.java

  + makeSha256BCrypt() : 비밀번호를 암호화 한다. 

  + checkSha256BCrypt() : 로그인시 입력한 비밀번호와 데이터베이스에 저장된 비밀번호를 사용하여 비밀번호 검증을 수행한다.

- SHA256.java : SHA 알고리즘을 수행한다.

- BCrypt.java : 암호화나 복호화를 수행한다.

Posted by 세상을 살아가는 사람
,

암호화/복호화

웹개발 2015. 7. 25. 18:28

은노기의 블록암호에 대한 부분을 보다가

서버에 저장되는 데이터를 암호화해서 저장하거나 다시 역으로 복호화하는 과정에 대하여 공부를 하게 되었다.

- 암호화 과정

  신용카드번호와 같은 정보를 암호화 알고리즘을 사용하여 암호화를 한후 저장하고

- 복호화 과정

  암호화된 정보를 사용하여 복호화 알고리즘을 통하여 복호화를 함으로써 원래 정보인 신용카드번호를 알아낸다.


우리는 인터넷뱅킹을 할 때, 공인인증서를 발급받아 인터넷뱅킹의 서버로부터 휴대폰으로 인증서를 다운받는다. 이와 같이 인터넷뱅킹 서버와 휴대폰간에 키를 공유하게 된다.

또한 우리는 인증서가 노춛되었다거나 다른 사람이 인증서를 주었다고 하여 그대로 사용할 수 있는 것이 아니다. 인증암호가 별도로 있기 때문인데, 이것은 이전에 기술한 비밀번호 저장과 같이 자신의 인증번호로 다시 암호화를 하기 때문이다.


은노기에서는 KISA에서 제공하는 SEED 알고리즘을 사용하여 암호화 및 복호화를 한다.

신용카드 정보와 비밀키를 사용하여 SEED 알고리즘을 돌려 암호화된 신용카드 정보를 생성한 후 저장하게 된다.


config.jsp : ket.dat에 대한 경로를 저장하는데 full path를 지정해 주어야 한다.

Posted by 세상을 살아가는 사람
,

오늘은 은노기의 JSP2.3 웹프로그래밍을 공부를 하다가

회원관리 프로그램의 데이터베이스 테이블 중 비밀번호 부분을 암호화하는 절차를 기술하고자 한다.

참조 : 은노기 JSP2.3 웹프로그래밍 372p


입력받은 비밀번호와 Private 키를 사용하여 SHA-256 해시함수를 돌린다.

해시함수의 결과로 생성된 암호화된 비밀번호를 다시 bcript를 사용하여 해시함수를 돌린다.

그러면 60 바이트의 암호화된 비밀번호가 생성이 된다.


해시함수의 특성상 암호화된 비밀번호가 알려주더라고 원래의 비밀번호를 다시 알아낼 수가 없다.

따라서 비밀번호의 노출을 방지할 수 있다. 즉, 시스템에는 원래 사용자가 설정한 비밀번호는 저장이 되지 않고, 해시함수를 통해 생성된 암호화된 비밀번호만이 저장되기 때문에 운영자들도 사용자가 설정한 비밀번호를 알수가 없으며, 비밀번호의 분실시에는 다시 새로운 비밀번호를 사용자가 설정하도록 함으로써 비밀번호의 보안을 유지한다.

Posted by 세상을 살아가는 사람
,