▶ 웹 보안

암호화 복호화란

SieunLim 2018. 7. 13. 01:51
728x90

요약

  • 암호는 단방향, 양방향으로 나뉜다.
    단방향 : 재사용 X (Ex.사용자 비밀번호) 
    양방향 : 재사용 O (Ex.주소,이메일)
  • 단방향 암호는 bcrypt가 제일 보편화 되어있다.
  • 양방향 암호는 AES 와 RSA 등을 쓴다 (선택사항)
  • 암호의 알고리즘을 직접 구현할 수 있다.
  • jasypt 는 간편하고 단방향,양방향 모두 지원하지만 사용하는 암호 알고리즘의 보안이 약하다 
    DIGEST ALGORITHMS: [MD2, MD5, SHA, SHA-256, SHA-384, SHA-512] 
    PBE ALGORITHMS: [PBEWITHMD5ANDDES, PBEWITHMD5ANDTRIPLEDES, PBEWITHSHA1ANDDESEDE, PBEWITHSHA1ANDRC2_40

I. 암호란?

  • 암호(Cryptography) : 평문을 암호문으로 변환 하거나 암호문을 평문으로 변환하는 기술

    • 평문(Plaintext) : 해독 가능한 형태의 텍스트

      Ex) ("123456")

    • 암호문(Ciphertext) : 해독 불가능한 형태의 텍스트

      Ex) ("aBD#fefa$fae!") 

II. 암호화(Encryption)&복호화(Decryption)

  • 암호화(Encryption) : 평문을 암호문으로 변환하는 과정

    Ex) 평문("123456") → 암호화 → 암호문("aBD#fefa$fae!")

  • 복호화(Decryption) : 암호문을 평문으로 변환하는 과정 

    Ex) 암호문("aBD#fefa$fae!!") → 복호화 → 평문("123456")

III. 암호화의 종류 

  • 단방향 암호화 : 암호화 후 복호화 할 수 없다 

    Ex) 사용자 비밀번호 - 사용자가 입력한 비밀번호를 암호화 하여 DB에 저장이 될때, 모든 접근자(개발자포함)는 암호화 된 코드를 다시 평문으로 볼 수 없다.
    또한, 해킹이 되어도 복호화가 매우 힘들다. (예외 - RainbowTable) 

    참고: https://www.youtube.com/watch?v=TeIVhioUAXs

  • 양방향 암호화 : 암호화와 복호화 모두 가능하다 
    Ex) 사용자 주소, 이메일, 번호 또는 전자서명 같이 재사용성이 있는 정보는 암호화 복호화 모두 이루어져야한다

IV. 암호 알고리즘 

이제, 평문을 암호문으로 어떻게 만드는지에 대해서 알아보자. 
사용자가 정보를 입력하여 DB로 전달 되기 전에, 입력 값을 암호문으로 변경 해주는 알고리즘이 있다.

1). 알고리즘(단방향)

  • 알고리즘은 다양하다 그 중 가장 많이 쓰이는 해시함수 알고리즘이 적용된 것만 가져옴
    해시 함수사용의 중요성 (http://ppss.kr/archives/16823)

  • SHA를 보안해 좀더 쉽게 사용가능한 알고리즘

    • PBKDF2 

      해시 함수의 컨테이너인 PBKDF2는 솔트를 적용한 후 해시 함수의 반복 횟수를 임의로 선택할 수 있다. PBKDF2는 아주 가볍고 구현하기 쉬우며, SHA와 같이 검증된 해시 함수만을 사용한다.(Django 에서 사용) 
      PBKDF2 적용코드

    • bcrypt 

      bcrypt는 애초부터 패스워드 저장을 목적으로 설계되었다. bcrypt는 보안에 집착하기로 유명한 OpenBSD에서 기본 암호 인증 메커니즘으로 사용되고 있고 미래에 PBKDF2보다 더 경쟁력이 있다고 여겨진다. 입력값을 72 byte로 해야 해서 조금 귀찮다 하지만 가장많이쓰인다
      bcrypt 적용코드 http://vip00112.tistory.com/39http://kingle1024.tistory.com/11

    • scrypt 

      scrypt는 상대적으로 최신 알고리즘이며 나머지 둘보다 더 경쟁력 있는 것으로 평가되나, 아직 덜 확산되어 있다. scrypt는 다이제스트를 생성할 때 메모리 오버헤드를 갖도록 설계되어, 억지 기법 공격(brute-force attack)을 시도할 때 병렬화 처리가 매우 어렵다. 따라서 PBKDF2보다 안전하다고 평가되며 미래에 bcrypt에 비해 더 경쟁력이 있다고 여겨진다.
      scrypt 적용코드 아직/ PBKDF2의 강화판. 굼벵이 같은 해싱 속도로 유명하다

    암호학적 해시 함수 장단점 & 보안점 : http://d2.naver.com/helloworld/318732 
    이 외 해킹공격 & 팁
    http://www.codeok.net/%ED%8C%A8%EC%8A%A4%EC%9B%8C%EB%93%9C%20%EB%B3%B4%EC%95%88%EC%9D%98%20%EA%B8%B0%EC%88%A0 

2) 알고리즘 (양방향)

a) 대칭형(비밀키 암호) 알고리즘

  • AES (현재 가장 보편적으로 쓰이는 암호화 방식은 현 미국 표준 방식인 AES. 128~256비트 키를 적용할수 있어 보안성이 뛰어나며 공개된 알고리즘이라 누구나 사용할 수 있다.) 

AES 적용 코드: http://blog.kindler.io/java-encrypt/

b) 비대칭형(공개키 암호)알고리즘

  • RSA (공개키 암호시스템의 하나로 암호화뿐만 아니라 전자서명이 가능한 최초의 알고리즘) 

RSA 적용 코드: (https://www.holaxprogramming.com/2017/06/12/encryption-with-rsa/

대칭/비대칭형 비교: https://sungjk.github.io/2016/09/30/Security.html

암호종류 위키: https://namu.wiki/w/%EC%95%94%ED%98%B8%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98 
암호화 개념참고 :http://blog.kindler.io/java-encrypt/ 

Jasypt (제이 싀뜨)

db properties 적용방법
http://blusky10.tistory.com/266

반응형