서언 본 고 는 주로 암호 화 라 이브 러 리 에서 암호 화 알고리즘 의 사용 원칙 과 주의해 야 할 문 제 를 소개 한다.최 우선 원칙: 만약 에 공사 에서 안전 암호 화 와 관련 된 내용 이 있 으 면 암호 화 알고리즘 을 스스로 실현 하려 고 하지 마 세 요. 대칭 암호 화 관련
어떤 암호 화 알고리즘 을 선택 하 는 지 모 를 때 AES 를 사용 하여 서로 다른 작업 모델 과 결합 하면 그룹 암호 화 에 도 사용 할 수 있 고 스 트림 암호 화 에 도 사용 할 수 있 으 며 안전성 을 확보 하 는 동시에 대부분 플랫폼 에서 뛰어난 성능 을 나타 낸다.
128 비트 의 AES 는 충분히 안전 하 다. 256 비트 의 AES 는 현재 필요 하지 않다. 미래 양자 컴퓨터 의 궁 거 공격 을 막 으 려 고 하지 않 는 다 면.
AES 는 DES (3DES 포함) 보다 안전 할 뿐만 아니 라 DES 보다 빨 라 이미 전용 DES 가속 하드웨어 가 있 는 경 우 를 제외 하고 DES 를 선택 할 이유 가 없다.
스 트림 암호 화 알고리즘 은 ChaCha 20 (또는 Salsa 20) 을 사용 하고 RC4 를 고려 하지 마 세 요. 이미 풀 렸 고 Cha 20 은 더 안전 할 뿐만 아니 라 훨씬 빠 릅 니 다.
AES - NI 명령 집합 이 있 는 플랫폼 에 서 는 AES 를 사용 하 는 속도 가 빠 르 고 이 명령 집합 이 없 는 플랫폼 에 서 는 ChaCha 20 을 사용 하 는 것 이 빠 르 며, 대부분의 PC 엔 드 CPU 에 이 명령 집합 이 있 으 며, 대부분의 모 바 일 CPU 에 서 는 이 명령 집합 (또는 유사 한 명령 집합 이 있 지만 효과 가 AES - NI 보다 좋 지 않다) 이 없 기 때문에 PC 엔 드 에 서 는 AES 를 사용 하고 모 바 일 엔 드 에 서 는 Cha 20 을 사용 하 는 방법 이 있다.
그룹 암호 작업 모드 는 ECB, CBC, CTR, CFB, OFB 등 이 있 는데 그 중에서 CTR, CFB, OFB 는 스 트림 암 호 를 지원 합 니 다.
ECB 모드 에서 같은 명문 에 같은 암호 문 이 생 겨 서 안전 하지 않 습 니 다. 암호 블록 마다 비밀 번 호 를 바 꾸 지 않 으 면 이 모드 를 선택 하지 마 십시오.
CBC 의 IV (초기 화 벡터) 는 예측 할 수 없 는 난수 여야 한다.
CTR 모드 에서 nonce 는 중복 되 지 말 라 고 요구 합 니 다. 하나의 일반적인 실천 은 중복 되 지 않 는 64 비트 의 무 작위 수 를 64 비트 의 카운터 와 연결 하여 128 비트 의 nonce 를 형성 하 는 것 입 니 다.
CBC 모드 암호 화 는 병행 할 수 없고 복호화 는 병행 할 수 있 습 니 다.CTR 모드 는 각 암호 블록 이 서로 독립 되 고 암호 화 복호화 가 병행 화 될 수 있 습 니 다.
AEAD 알고리즘 (인증 암호 화) 만 변경 을 방지 할 수 있다. 예 를 들 어 AES - GCM, AES - OCB, ChaCha 20 - Poly 1305 등 이다.HTTPS 사 이 트 를 열 면 암호 화 방법 은 대부분 AES - GCM 을 사용 합 니 다.일부 사이트 가 모 바 일 에서 사용 할 수 있 는 Cha 20 - Poly 1305 는 ARM 구조의 CPU 를 최적화 시 켰 다.
디스크 암호 화 는 XTS - AES 를 사용 하 십시오.
산열 상관
MD5, SHA - 1 은 이미 악의 적 으로 충돌 할 수 있 는 것 으로 밝 혀 졌 다. 예 를 들 어 구 글 은 두 가지 내용 이 다 르 지만 SHA - 1 값 이 같은 PDF 파일 을 만 들 었 기 때문에 공사 에서 이 두 가지 해시 알고리즘 을 사용 하지 말고 적어도 SHA - 256 을 사용 해 야 한다.
사용자 가 비밀 번 호 를 입력 하여 정 보 를 암호 화 하려 면 비밀 번 호 를 직접 사용 하거나 해시 연산 을 키 로 간단하게 하지 말고 전문 적 인 PBKDF 2 알고리즘 으로 키 를 내 보 내야 합 니 다.
비밀 번 호 를 저장 할 때 흔히 볼 수 있 는 잘못된 부분 은 비밀 번 호 를 여러 번 MD5 나 SHA - 1 로 계산 하 는 것 이다. 이렇게 하면 더욱 안전 하 다 고 생각 하 는데 실제 이런 방법의 안전성 은 검증 되 지 않 고 오히려 요약 공간 을 줄 여서 안전성 을 떨 어 뜨 릴 수 있다.
무지개 시계의 공격 을 막 기 위해 비밀 번 호 를 저장 하려 면 반드시 소금 (salt) 을 넣 어야 하 며, 비밀번호 마다 다른 salt 를 사용 해 야 한다.많은 플랫폼 에서 이러한 API 를 제공 합 니 다. 이 API 들 은 보통 salt 와 해시 값 을 전체 출력 으로 하고 데이터 베 이 스 를 수정 하여 salt 를 따로 저장 할 필요 가 없습니다.
주의해 야 할 것 은 MD / SHA 시리즈 (예 를 들 어 MD5, SHA - 256 등) 자체 가 비밀 번 호 를 저장 하기 위해 디자인 된 것 이 아니 기 때문에 SHA - 256 이 안전 하 더 라 도 누 드 의 랜 덤 salt + SHA - 256 은 좋 은 선택 이 아니다.
비밀 번 호 를 저장 할 때 Bcrypt 를 추천 합 니 다. 비밀 번 호 를 저장 하기 위해 전문 적 으로 디자인 된 것 입 니 다. C, C \ #, Go, Java, JavaScript, Perl, PHP, Python, Ruby 등 여러 언어 에서 해당 하 는 실현 이 있 습 니 다.물론 업 데 이 트 된 Scrypt 과 Argon 2 이론 적 으로 안전성 이 높 지만 이들 의 지원 이 광범 위 하지 않 아 많은 플랫폼 에서 사용 할 수 없다.
사용자 가 입력 한 암호 와 데이터베이스 에 저 장 된 암 호 를 비교 할 때 언어 에 있 는 = = 비교 연산 자 나 strcmp 함 수 를 사용 할 수 없습니다. 순차 공격 을 받 을 수 있 습 니 다. PHP 에서 제공 하 는 password_verify() 함수 와 같은 고정 실행 시간 비교 방법 을 사용 하 십시오.
비대 칭 암호 화 관련
비대 칭 암호 화 는 매우 느 리 고 대칭 암호 화 보다 몇 개의 수량 급 이 느리다.
그래서 보통 비대 칭 암호 화 알고리즘 을 사용 하여 대칭 키 를 암호 화하 고 대칭 키 로 메시지 내용 을 암호 화 합 니 다.
Diffie – Hellman 키 교환 을 통 해 키 를 직접 사용 할 수 없습니다. 분포 가 고 르 지 않 습 니 다. 안전 을 위해 서 는 키 내 보 내기 함수 (Key Derivation Function) 를 사용 하여 키 를 내 보 내야 합 니 다.
타원 곡선 암호 화 키 는 RSA 보다 훨씬 짧 아 128 비트 AES 의 암호 화 강 도 를 달성 하려 면 타원 곡선 키 는 256 비트 만 필요 하고 RSA 는 3072 비트 가 필요 하 다.
그러나 타원 곡선 암호 화 는 더욱 복잡 하고 실수 하기 쉽다.
RSA 에서 공공 지수 e 는 일반적으로 65537 을 선택한다.
RSA 공개 키 길 이 는 최소 2048 비트 를 선택 하고 1024 비트 는 안전 하지 않 습 니 다.
타원 곡선 암호 화 시 곡선 은 Curve 25519 (키 교환 에 사용 되 는 X25519 와 디지털 서명 에 사용 되 는 Ed 25519 포함) 를 선택 하 는 것 을 권장 합 니 다. 효율 과 안전성 이 모두 좋 습 니 다.Curve 25519 를 사용 할 수 없다 면 (예 를 들 어 낮은 버 전의 OpenSSL) prime 256 v1 (P - 256) 을 선택 하여 광범 위 하 게 지원 하 는 것 을 권장 합 니 다.
상용 암호 화 라 이브 러 리 비교 본인 이 사용 한 암호 화 라 이브 러 리 만 비교 하면 주관적 인 경향 이 있 을 수 있 으 므 로 참고 하 시기 바 랍 니 다. OpenSSL C 언어 로 작 성 된 것 은 가장 오래된 암호 화 라 이브 러 리 중 하나 로 대부분의 Linux 발행 판 에 통합 되 어 대량의 사이트 가 HTTPS 서 비 스 를 제공 하 는 데 의존 합 니 다. 장점: 사용 이 매우 광범 위 하고 효율 과 안전성 이 오 랜 시련 을 겪 으 며 구멍 이 나 도 빨리 발견 되 고 고 칠 수 있 으 며 무엇 을 사용 해 야 할 지 모 르 는 상황 에서 가장 타당 한 선택 이다. 단점: 공식 문서 가 완선 되 지 않 아서 많은 API 는 관련 서적 과 박문 을 찾 아 봐 야 어떻게 사용 하 는 지 알 수 있 습 니 다.내부 코드 가 비교적 복잡 하 다. Point Advice: OpenSSL 을 사용 하여 프로 그래 밍 을 할 때 가능 한 한 더 높 은 EVP 시리즈 API (바로 EVP 로 시작 하 는 함수) 를 사용 하 는 것 이 OpenSSL 공식 추천 방법 입 니 다. Botan C + + 11 로 작 성 된 암호 화 라 이브 러 리 를 사용 합 니 다.현재 C + + 11 로 작 성 됐 지만 90 년대 에 태 어 났 고 오래된 암호 화 라 이브 러 리 이기 도 합 니 다. 장점: 포 함 된 알고리즘 이 완비 되 어 있 고 C + API 는 사용 하기에 편리 하 며 내부 코드 는 OpenSSL 처럼 난잡 하지 않다.C 와 Python 등 다양한 언어 로 사용 할 수 있 는 FFI 모듈 을 제공 합 니 다. 단점: 파이프 / 필터 메커니즘 의 성능 이 낮 고 앞으로 개선 이 불가능 합 니 다.문서 부분 에 자주 사용 되 는 API 는 예시 가 없어 사용 이 불편 합 니 다. 제안: C + 프로젝트 는 이 라 이브 러 리 를 사용 하 는 것 을 권장 합 니 다. libsodium C 언어 로 작 성 된 것 은 다른 고급 암호 화 도 구 를 지원 하 는 것 이 목적 이기 때문에 위 에서 언급 한 두 암호 화 라 이브 러 리 와 크게 다 릅 니 다. 장점: 안전성 과 성능 이 다른 암호 화 라 이브 러 리 에 비해 더욱 급진 적 입 니 다.새 버 전 은 현재 가장 안전 한 암호 화 알고리즘 만 포함 합 니 다. 예 를 들 어 키 내 보 내기 함 수 는 기본적으로 Argon 2 이 고 AES 는 하드웨어 가속 AES - 256 - GCM 만 지원 합 니 다. 예 를 들 어 MD5, SHA 1, RC4 등 안전 하지 않 은 알고리즘 은 일체 제공 되 지 않 습 니 다.따라서 기본 적 으로 제 공 된 알고리즘 만 사용 하면 높 은 안전성 을 얻 을 수 있 고 알고리즘 을 잘못 사용 하여 안전 결함 이나 성능 결함 을 초래 하기 쉽 지 않다. 단점: 장점 이자 단점 이 고 급진 적 이 며 선택 할 수 있 는 알고리즘 이 적 고 유연성 이 위 에서 언급 한 암호 화 라 이브 러 리 보다 못 하 다. 참고 문헌 PHP Manual FAQ: Safe Password Hashing Wikipedia: Bcrypt Dustin Boswell: Storing User Passwords Securely: hashing, salting, and Bcrypt
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: