728x90
반응형

호화 방식에는 크게 두 가지가 존재한다.

양방향 암호화와 단방향 암호화가 바로 그것이다.

 

단방향 알고리즘

단방향 알고리즘은 암호화는 가능하지만 복호화는 불가능한 방식이다.

데이터의 진위여부는 확인하고 싶으나, 데이터 내부의 privacy는 지키고 싶을 때 사용

전자 서명에서 많이 사용한다.

대표적으로 HASH 방식에 기반한 알고리즘들이 있다.

 

MDC 방식: Modification Detection. 키 없음

- SHA, MD5, HAVAL, ...

 

MAC 방식 (메시지 인증, 디지털 서명): Message Authentication. 키 있음

- HVAC, NMAC, ...

 

양방향 알고리즘

양방향 알고리즘은 암호화가 가능하고 복호화도 가능한 방식이다.

크게 **대칭키 방식** **비대칭키 방식**이 있다.

 

대칭키 방식

 

_대칭키 방식_

데이터 암호 목적

암호화 키 == 복호화 키

 

Stream 방식

 

_Stream 방식_

1bit씩 연산. XOR 연산. H/W 구현 용이

예시

  • True Random: OTPad
  • Psuedo Random: RC4(PPTP, WEP, TKIP)

 

Block 방식

 

_Block 방식_

2bit 이상 묶음 연산. S/W 구현 용이

예시

  • Festel: DES
  • SPN: **AES**
  • 기타: IDEA

 

단점

  1. 키가 탈취되었을 때, 모든 정보가 털린다.
  2. 안전하게 사용하기 위해서는 모든 사용자가 서로 다른 키를 가져야 하므로 키 관리를 어떻게 할 것인가? 라는 문제에 대한 고민 필요.
  3. 키를 안전하게 주고 받는 방법에 대한 고민 필요.

 

비대칭키 방식

 

_공개키 방식_

 

대칭키 교환 용도

암호화 키 != 복호화 키

 

예시

  1. client가 private key/public key를 암호화하여 server에 전달
  2. server가 전달받은 public key로 평문을 암호화하여 client에게 전달
  3. server로부터 전달받은 암호를 client가 가진 private key로 복호화

 

종류

  • 인수분해방식: RSA(디지털서명)
  • 이산대수: DH(키교환), DSA(디지털서명)
  • 타원곡선방정식: ECC

 

참고 링크

728x90
반응형

'백엔드 Backend > 암호화' 카테고리의 다른 글

[암호화] 암호화 - 1  (1) 2024.09.24
728x90
반응형

보안을 위해서라면 암호화는 중요하다.

 

해시 계열

 

해시(Hash)

해시는 암호화 과정이라고 하기에는 어렵고 보안이 이미 뚫린 바가 있으나,

암호화 기법과 함께 사용하여 시너지를 발휘할 수 있다.

 

  •  임의의 크기를 가진 데이터를 하나의 고정된 데이터로 변환시킨 것
  • 예시: "12345" -> 고정 길이 해시 값

 

MD5 (Message Digest algorithm 5)

RFC1321로 지정된 128비트의 해시 함수.

본 데이터가 다를지라도 같은 해시 값이 생성(충돌) 되고 이미 보안이 뚫린 바가 있기에, 보안 관련 용도로는 사용하지 않음.

  • 원프로그램 / 파일 무결성 검사할 때 사용
  • 32개의 16진수로 이루어진 해시 값 생성 (16^32)

 

SHA (Secure Hash Algorithm)

서로 관련된 암호학적 해시 함수들의 모음.

  • TLS, SSL, PGP, SSH, IPSec 등 많은 보안 프로토콜에서 채택
  • 원본 데이터의 작은 변화에도 해시 값의 변동이 매우 큼
  • SHA-2 계열 알고리즘은 현재까지 많이 쓰이고,SHA-256 / SHA-512가 널리 쓰임

 

 

암호화 알고리즘

 

Adaptive Key Derivation Dunction

  • 다이제스트(해시화된 데이터)를 생성할 때 **Salting**과 **Key-Stretching**을 반복하여 공격자가 유추할 수 없게 보안의 강도를 선택할 수 있는 함수
  • Salting: 해시 함수 실행 전 원문에 임의의 문자를 덧붙여 보안성을 높이는 기법
  • Key-Stretching: 입력한 패스워드의 다이제스트를 생성하고, 생성된 다이제스트를 입력값으로 하여 다이제스트를 생성하는 것을 반복하는 기법

 

PBKDF2 (Password-Based Key Derivation Function)

해시 함수의 컨테이너 역할을 하는 함수

  • 검증된 해시함수만을 사용
  • 해시함수와 salt를 적용하여 해시함수의 반복 횟수를 지정하여 암호화
  • 가장 많이 사용되는 ISO 표준에 적합한 알고리즘

 

Bcrypt

패스워드 해싱 함수 (Blowfish 암호 기반)

  • 현재까지 가장 강력한 암호화 알고리즘
  • 해시화 반복횟수를 늘려 연산속도를 늦출 수 있어, 연산 능력이 강화된 Brute-Force 공격에 대비 가능

 

Blowfish 알고리즘

- 32비트 ~ 448비트의 가변길이의 키를 이용하는 비밀키 블록암호

 

Brute-Force

- 랜덤한 값을 무차별적으로 대입하여 해시 알고리즘의 원본 데이터를 알아내는 공격 기법

 

Scrypt

PBKDF2와 유사한 함수

  • 다이제스를 생성할 때 메모리 오버헤드를 갖도록 설계되어 Brute-Force 시도 시 병렬화 처리 어려움
  • Bcrypt보다 더 경쟁력 있다고 평가 됨

 

Seed

한국인터넷진흥원(KISA)에서 개발한 128비트의 대칭키 블록 암호 알고리즘

728x90
반응형

'백엔드 Backend > 암호화' 카테고리의 다른 글

[암호화] 암호화 - 2  (0) 2024.09.25
728x90
반응형

스프링(Spring) 프레임워크

  • 엔터 프라이즈 어플리케이션 개발을 위해 만들어진 경량 프레임워크
  • 특징
    • POJO (Plain Old Java Object)
    • 모듈식 프레임워크
    • 높은 확장성, 범용성, 광범위한 생태계
    • 경량급 오픈소스 프레임워크

POJO Plain Old Java Object

  • POJO: 특정 기술에 종속되지 않는 순수 자바 객체
  • 모든 스프링 어플리케이션은 POJO 객체와 스프링 컨테이너를 포함한다.
  • POJO 클래스를 개발하고, 스프링 컨테이너는 이 POJO 객체들을 관리한다.
    • 스프링 컨테이너는 이 POJO 객체들의 생성, 의존성 주입, 생명주기를 관리한다.
  • 스프링 컨테이너가 관리하는 객체를 Bean 이라고 한다.
  • 스프링 컨테이너: o.s.Context.ApplicationContext 인터페이스를 구현한 구현 클래스

스프링 프레임워크의 세가지 핵심 요소

  • 의존성 주입 (Depenency Injection)
    • 런타임 시점에 의존성을 주입함으로써, 객체간 종속성을 유동적으로 하기 위함
  • 관점 지향 프로그래밍 (AOP: Aespect Oriented Programming)
    • 기능적 요구사항과 비기능적 요구사항 분리
  • 서비스 추상화 (Service Abstraction)

용어 정리

  • Bean: 스프링 컨테이너가 관리하는 객체
  • POJO: 특정 기술에 종속되지 않은 순수 자바 객체
  • 도메인: 소프트웨어 상에서 해결해야 할 비즈니스 영역의 문제
  • 기능적 요구 사항: 사용자에게 직접 서비스하는 기능을 정리한 것
  • 비기능적 요구 사항: 서비스 기능은 아니고, 개발에 필요한 기능을 정리한 것
    • 예시: 로그 남기기, RDBMS 트랜잭션 시작 & 커밋하는 코드
    • 다시 말하자면, 사용자가 알 수 없는 내용
728x90
반응형

+ Recent posts