암호화란?암호화 (Encryption) 란 평문을 특정 Key를 이용해 해독할 수 없는 형태로 변경하는 것을 말한다. 방식에 따른 분류암호화 기법에는 크게 양방향과 단방향 암호화가 있는데 평문을 암호화 한 암호문을 반대로 복호화를 할 수 있는지 여부에 따라서 양방향 / 단방향으로 나눠진다. 여기서는 암호화/복호화 가 가능한 양방향 암호화에 대해서 정리해본다. 양방향 암호화 된 암호문을 복호화 할 수 있는 기법을 의미한다. 따라서 암호화/복호화 시 필요한 Key가 존재 하는데 암호화와 복호화를 같은 키를 사용하느냐 다른 키를 사용하느냐에 따라서 대칭키 / 비대칭키로 분류할 수 있다. 대칭키 (비공개키) 암/복호화에 동일한 키를 사용하는 암호화 방식이다. 따라서 키가 노출되면 안되므로 공개하면 안되므로 비공개키 라고도 한다. 대표적으로 AES 알고리즘이 있다. ※ 여기서 사용되는 Key를 Secret 이라고 하는데 Private Key와는 다르다. Secret은 노출을 비밀스럽게 해야하는 Key를 의미하고 Private Key는 절대 노출되어선 안되는 Key를 의미한다. 비대칭키 (공개키) 암/복호화에 다른 키를 사용하는 암호화 방식이다. 노출시켜선 안되는 키를 Private Key / 노출시켜도 상관 없는 키를 Public Key 라고 한다. 누구나 사용해야 하는 클라이언트 측에서 Public Key를 사용하게 된다. 대표적으로 RSA 알고리즘을 사용한다. ※ 참고로 전자서명에서는 클라이언트가 사용하는 Key가 중요하게 다뤄져야 하므로 Private Key, 서버 측에서는 검증만 하면 되므로 Public Key를 사용하게 된다. 단방향 그림2. 단방향 알고리즘 (해쉬)[그림2] 와 같이 암호문을 평문으로 복호화 할 수 없는 기법을 의미한다. 단방향 기법은 HASH 를 사용하는데 흔히 자료구조에서 사용하던 HASH 가 아니고 암호학적으로, 수학적으로 복호화가 거의 불가능하다고 증명이 된 알고리즘을 사용해야 한다. 인증, 신원증명 등에 주로 쓰이며 대표적으로 SHA-256 알고리즘을 주로 쓴다. 양방향 암호화(RSA) 단방향 암호화(SHA 256) 차이
web(JSP) -> server(controller)로 파라미터를 보낼 때 중간에서 정보를 가로챌 수 있다. 이러한 보안 문제를 막기 위해 JSP에서 RSA를 사용하여 비밀번호를 암호화해준다.. RSA로 암호화된 파라미터를 controller에서 복호화시키고, 복호화시킨 파라미터 값을 단방향 암호화인 SHA256으로 암호화시킨다. RSA 암호화Rsa.java
login.jsp RSA 양방향 암호화를 사용하기 위해선 RSA 자바스크립트 라이브러리 추가가 필요하다. 여기서 js를 다운로드 받아 프로젝트에 넣는걸 추천. JSEncrypt Introduction When browsing the internet looking for a good solution to RSA Javascript encryption, there is a whole slew of libraries that basically take the fantastic work done by Tom Wu @ http://www-cs-students.stanford.edu/~tjw/jsbn/ and then modify that travistidwell.com
서버 측에서 RSA 공개키와 개인키(암호키)를 생성하여 개인키는 세션에 저장하고 공개키는 HTML 로그인 폼 페이지에 Input [type=hidden] value 값에 세팅.
RSA 복호화LoginController.java
SHA 256 암호화EgovFileScrty.java
참고 : GitHub - kenu/egov Contribute to kenu/egov development by creating an account on GitHub. github.com RSA (비대칭 암호화 알고리즘) 사용하는 목적WEB 서버에 SSL 설치 없이 로그인처리할때 평문으로 전송할경우 중간에서 정보를 가로채어 가로챈 계정정보를 권한이 없는 사용자가 시스템에 로그인 한후 시스템을 손상시킬수도 velog.io |