반응형



요즘은 정말 개인 정보 유출에 대한 사건, 사고들이 많이 발생한다. 하루가 멀다하고 어느 사이트에서 수십, 수백만 건의 사용자 정보가 유출 되었다는 기사를 자주 듣게 된다. 그만큼 개인 정보를 탈취해서 악용 하려는 사람들이 많아지고 있다. 그래서 요즘은 개인 정보를 DB에 저장할 때에는 무조건 암호화를 해야 한다. 권장이 아니라 필수이다. 



이 책에서는 각종 암호화에 대한 이론들에 대해서 설명을 해준다. 어떻게 만들어 졌으며 어떻게 만들어야 하는지에 대해서 자세히 설명해주고 있다. 그리고 암호화 기법에 대한 장,단점과 사용 사례들도 말해준다. 암호화 기법을 설명하면서 암호화 기법이 갖고 있는 장점, 그리고 어떤 부분이 취약한지, 그 취약한 부분에 의해서 어떠한 일들이 발생할 수 있는지 자세히 설명해준다. 그리고 그 부분을 극복 하려면 어떻게 해야 하는지도 설명해준다. 



내가 이렇게 RSA관련 부분을 일부 캡쳐를 한것은 업무 할 때에 가장 많이 사용하고 친숙해서 이부분을 먼저 읽었다. 그냥 툴에서 지원해주는 것만 쓸줄 알았지 이게 어떻게 구현되어있는지 생각해본적은 없었는데 이렇게 자세히 설명을 해준다. 



그리고 구현 방법도 알려준다. 그런데 위에 저자도 말했듯이 그런 일은 없길 바래야 할것 같다. 구현을 해봐야겠다는 생각도 안해봤지만 일단 복잡하다. 저자가 충분히 알아듣게 설명을 해주고 있는데도 이해하는데 상당히 어렵다. 


그래서 내가 읽으면서 생각해본 이책에 대한 장,단점은 이렇다.


장점

- 암호화에 대한 내용을 기초부터 심화까지 자세히 알수 있다. 대학교에서 전공 서적으로 사용해도 될것 같다.


단점

- 내용이 어렵다. 암호화라는 것 자체가 쉬운 내용이 아니기 때문에 당연한거다. 그래서 이 책을 읽기 위해서는 수학적 지식도 많이 필요하다. 그렇지 않으면 이해하기가 쉽지 않다. 


그래서 결론적으로 어느정도 암호화에 대해서 알고 있는 사람이 심화로 공부하기에 좋은 책이라는 생각이 들었다. 




728x90
반응형
반응형


프로젝트 내부에는 설정파일들이 많이 있다. 대표적인 항목이 DB 접속 정보가 있다. 

그런데 이 접속정보에는 ID, PASSWORD 가 항상 존재 한다. ID는 상관이 없지만 PASSWORD 정보가 파일 내부에 평문으로 적혀있으면 외부에 노출될 위험이 있다. 그래서 암호화를 해야 한다. 


Jasypt를 이용하면 이런 항목들을 쉽게 암호화 할 수 있다. 



먼저 라이브러리를 다운로드 받는다.


http://www.jasypt.org/download.html


사이트에 들어가보면 상단에 DOWNLOAD JASYPT 라는 링크가 있다. 그 걸 누르면 라이브러리를 다운로드 받을 수 있다. 

이 글을 쓰는 시점의 버전은 1.9.2 이다. 


다운로드 한다음 사용 방법은 간단하다. 압축을 푼후에 bin 폴더로 이동한다. 


그리고 콘솔창(윈도우cmd 창)에서 아래와 같이 입력한다. 




encrypt input="password" password="pwkey" algorithm="PBEWITHMD5ANDDES" 



input 항목에는 실제 사용하고 있는 패스워드를 입력하면 되고 password 항목에는 암호화된 값을 복호화 할때 사용되는 key 값을 넣으면 된다. 임의로 정해서 넣으면 된다.


명령어 실행 결과.



----ARGUMENTS-------------------

algorithm: PBEWITHMD5ANDDES

input: password

password: pwkey

----OUTPUT----------------------

oQV892dssDi5Xzs9tQoVuaqyRaFa7Za5 



여기에서 보이는 OUTPUT 항목이 실제 암호화 된 값이 된다.


이제 암호화 된 값 생성까지는 완료가 됐고 실제 spring 프로젝트에 적용을 하면 된다.


먼저 Jasypt 라이브러리르 추가한다. 


Mvn repository 에 가서 jasypt 검색을 하면 정말 많이 나온다.  최신버전으로 찾아서 넣으면 되긴 하는데 여기에서 주의할 점이 있다. 


최신버전의 라이브러를 추가하고 어플리케이션을 run 했을때 version  관련 오류가 날수가 있다. 이경우에는 현재 Spring 버전이 jasypt 최신버전과 호환이 안되던지 아니면 jdk 버전이 호환이 안되던지 둘중 하나이다. 실제로 jasypt 라이브러리 depency를 보면 spring 4.3.8 Release 와 dependency 가 되어있다. 그래서 주의를 해야 한다.


나 같은 경우는 실제로 버전 충돌때문에 build.gradle 에 아래와 같이 추가를 했다. (spring boot 버전도 1.3.8 아래였고 jdk 버전도 7이었다.)


compile('com.github.ulisesbocchio:jasypt-spring-boot-starter:1.4-java7')




spring 설정 파일에 아래와 같이 정의를 한다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    <bean id="encryptorConfig" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
        <property name="algorithm" value="PBEWithMD5AndDES" />
        <property name="password" value="pwkey" />
    </bean>
     
    <bean id="encryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
        <property name="config" ref="encryptorConfig" />
    </bean>
     
    <bean class="org.jasypt.spring3.properties.EncryptablePropertyPlaceholderConfigurer">
        <constructor-arg ref="encryptor" />
        <property name="locations">
            <list>
                <value>classpath:/properties/db.properties</value>
            </list>
        </property>
    </bean>
cs


그리고 마지막으로 설정 파일의 password 값을 암호화 한 값으로 넣어준다. 반드시 ENC라고 쓰고 괄호안에 값을 넣어야 한다.


1
datasource.password=ENC(EywTY3v00EbqKyxlLzkjag==)
cs


이렇게 하면 password 값을 읽어들일때 암호화 된 값을 읽어서 자동으로 복호화 한다.


Spring boot 일 경우에는 아래와 같이 설정해주면 된다.


먼저 Encryptor 를 정의한 class를 만들어준다.


1
2
3
4
5
6
7
8
9
10
11
12
13
@Configuration
public class PropertyEncryptConfiguration {
 
   @Bean
   static public StandardPBEStringEncryptor stringEncryptor() {
      StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
      EnvironmentPBEConfig config = new EnvironmentPBEConfig();
      config.setPassword("pwkey");
      config.setAlgorithm("PBEWITHMD5ANDDES");
      encryptor.setConfig(config);
      return encryptor;
   }
}
cs



그리고 main class 에 @EnableEncryptableProperties 를 추가해준다. 그럼 설정이 마무리 된다. 


암호화 하는 과정이 번거롭다면 그 부분만 따로 테스트 케이스를 만들어 놓는것도 좋은 방법이다.


728x90
반응형

'Development > Java' 카테고리의 다른 글

[Spring Security]간단 Spring Security  (0) 2017.06.27
[Spring]Controller Test 하기  (0) 2017.06.12
[SpringCloud]Spring Config..  (0) 2016.01.26
spring Cache  (0) 2015.12.05
Spring propagation  (0) 2015.12.01

+ Recent posts