Java Language
보안 및 암호화
수색…
소개
Java의 보안 관행은 두 가지 넓고 모호하게 정의 된 범주로 구분할 수 있습니다. Java 플랫폼 보안 및 보안 Java 프로그래밍
Java 플랫폼 보안 사례는 JVM의 보안 및 무결성을 관리합니다. 여기에는 JCE 공급자 및 보안 정책 관리와 같은 항목이 포함됩니다.
보안 Java 프로그래밍 관행은 보안 Java 프로그램을 작성하는 최선의 방법에 관한 것입니다. 여기에는 난수 및 암호화 사용, 취약성 예방과 같은 주제가 포함됩니다.
비고
예제가 명확하게 작성되어야하지만, 다루어야하는 몇 가지 주제는 다음과 같습니다.
- JCE 제공자 개념 / 구조
- 목록 항목
JCE
JCE (Java Cryptography Extension)는 개발자가 프로그램에서 암호화를 쉽고 안전하게 사용할 수 있도록하기 위해 JVM에 기본으로 제공되는 프레임 워크입니다. JCE 프로 바이더 시스템을 사용해 기본의 암호화 조작을 안전하게 구현하는 한편, 프로그래머에게 간단하고 이식 가능한 인터페이스를 제공함으로써이를 수행합니다.
키 및 키 관리
JCE는 암호화 작업과 키 생성을 보장하지만 개발자가 실제로 키를 관리해야합니다. 자세한 정보는 여기에 제공해야합니다.
런타임에 키를 처리하기 위해 일반적으로 받아 들여지는 가장 좋은 방법 중 하나는 byte
배열로만 저장하고 문자열로 저장하지 않는 것입니다. 이는 Java 문자열이 불변이므로 메모리에서 수동으로 "지워지거나"제로화 될 수 없기 때문입니다. 문자열에 대한 참조를 제거 할 수 있지만 정확한 문자열은 메모리 세그먼트가 가비지 수집되어 다시 사용될 때까지 메모리에 남아 있습니다. 침입자는 프로그램의 메모리를 덤프하고 키를 쉽게 찾을 수있는 큰 창이 있습니다. 반대로, byte
배열은 변경 가능하며 내용을 덮어 쓸 수 있습니다. 열쇠가 필요 없어지 자마자 열쇠를 제로 아웃하는 것이 좋습니다.
일반적인 Java 취약점
내용이 필요하다.
네트워킹 문제
내용이 필요하다.
임의성과 당신
내용이 필요하다.
대부분의 어플리케이션에서, java.utils.Random
클래스는 완벽한 "무작위"데이터 소스입니다. 배열에서 임의의 요소를 선택하거나 임의의 문자열을 생성하거나 임시 "고유"식별자를 만들려면 Random
을 사용해야합니다.
그러나 많은 암호 시스템은 보안 임의성에 의존하고,에 의해 제공되는 랜덤 Random
단지의 충분히 높은 품질 없습니다. 무작위로 입력해야하는 암호화 작업의 경우 SecureRandom
대신 사용해야합니다.
해싱 및 유효성 검사
더 많은 정보가 필요합니다.
암호 해시 함수는 세 가지 중요한 속성을 가진 함수 클래스의 멤버입니다. 일관성, 독창성 및 비가 역성.
일관성 : 동일한 데이터가 주어지면 해시 함수는 항상 동일한 값을 반환합니다. 즉, X = Y 인 경우 f (x)는 해시 함수 f에 대해 항상 f (y)와 같습니다.
유일성 (Uniqueness) : 해시 함수에 대한 두 개의 입력이 같은 결과를 가져 오지는 않습니다. 즉, X와 Y의 모든 값에 대해 X! = Y, f (x)! = f (y)이면.
비가역성 : 해시 함수를 "되돌릴"것은 불가능하지는 않지만 비현실적으로 어렵습니다. 즉, f (X) 만 주어지면, 원래의 X가 모든 가능한 값을 함수 f (brute-force)를 통해 두지 못하는 것을 발견 할 방법이 없어야합니다. f1 (f (X)) = X와 같은 함수 f1이 없어야합니다.
많은 함수에는 이러한 속성 중 하나 이상이 없습니다. 예를 들어, MD5와 SHA1은 충돌이있는 것으로 알려져 있습니다. 즉, 동일한 출력을 갖는 두 개의 입력이 있으므로 고유성이 부족합니다. 현재 안전하다고 여겨지는 일부 기능은 SHA-256 및 SHA-512입니다.