Java 암호화에 대해 알아야 할 모든 것



이 기사는 Java 암호화 및 예제와 함께 사용하는 방법에 대한 상세하고 포괄적 인 지식을 제공합니다.

암호화는 수학적 알고리즘을 사용하여 정보의 의미를 위장하여 권한있는 당사자 만 해독 할 수 있도록하는 방법입니다. 이 기사에서는 암호화 및 복호화에 대해 설명합니다. 다음 순서로 :

자바 암호화 소개

암호화는 컴퓨터에 있든 인터넷을 통해 전송 되든 상관없이 데이터 (예 : 텍스트, 대화 및 음성)를 보호하기 위해 구현됩니다. 최신 암호화 기술은 안전한 컴퓨팅 환경의 필수 요소입니다.





암호화 보안의 주된 역할은 원래의 일반 텍스트로 되돌리기가 어려운 암호문 (암호화 된 텍스트)을 생성하는 알고리즘의 기능에 있습니다. 키 사용은 또한 정보 보호 방법에 대한 또 다른 수준의 보안을 만듭니다. 키는 정보를 보유한 사람 만 메시지를 인코딩하고 디코딩 할 수있는 정보입니다.

Java의 암호화 및 복호화



대칭 암호화 알고리즘

대칭 알고리즘은 암호화 및 암호 해독에 동일한 키를 사용합니다. 이러한 알고리즘은 블록 모드 (고정 크기 데이터 블록에서 작동) 또는 스트림 모드 (데이터 비트 또는 바이트에서 작동)에서만 작동 할 수 있습니다. 이러한 알고리즘또한 데이터 암호화, 파일 암호화 및 통신 네트워크 (TLS, 이메일, 인스턴트 메시지 등)에서 전송 된 데이터 암호화와 같은 애플리케이션에 일반적으로 사용됩니다.

비대칭 (또는 공개 키) 암호화 알고리즘

암호화 및 복호화 작업 모두에 동일한 키를 사용하는 대칭 알고리즘과 달리 비대칭 알고리즘은이 두 단계에 대해 두 개의 동일한 키를 사용합니다. 이러한 알고리즘은 디지털 서명 및 키 설정 프로토콜을 계산하는 데 사용됩니다. 그러나 이것은 또한 일을 더 복잡하게 만드는 두 개의 키를 사용해야한다는 문제를 동반합니다.



기본 암호화 체계를 안전하게 구성하려면 이러한 모든 매개 변수 (최소한)를 올바르게 설계하는 것이 매우 중요합니다.

  • 올바른 알고리즘을 선택하는 것이 중요합니다.
  • 적절한 작업에 적합한 작동 모드 선택
  • 요구 사항에 따라 올바른 패딩 체계 선택
  • 적절한 키와 크기 선택
  • 암호화 보안 CSPRING으로 올바른 초기화.

이러한 모든 매개 변수를 안전하게 구성하는 것을 아는 것이 매우 중요합니다. 작은 구성만으로도 전체 암호화 시스템을 위험에 빠뜨리고 해커 및 기타 맬웨어의 공격에 노출시킬 수 있습니다. 따라서이 논의를 간단하게 유지하기 위해 알고리즘에 독립적 인 암호 초기화에 대해서만 논의하겠습니다. 이러한 암호화를 직접 수행하는 대신 전문가가 RSA 알고리즘의 p 및 q 값과 같은 더 많은 알고리즘 종속 구성을 구성하는 작업을 수행하도록하는 것이 항상 더 좋습니다. 절반 이상의 기본 암호화 매개 변수를 구성하여 수십, 수업이 사용됩니다.

hadoop의 jobtracker 및 tasktracker

클래스 계층 구조, 오버로드 된 생성자 / 메소드 등이 많이 도입되어 복잡성이 추가되어 불필요합니다. Java가 기본 구성을 복잡하게하지 않고 단순히 모든 매개 변수가 단일 클래스 SymmetricAlgorithm 및 AsymmetricAlgorithm의 경계 내에있는 Microsoft와 같은보다 단순화 된 아키텍처를 사용하기를 바랍니다. 처음 세 개의 매개 변수 (알고리즘, 작동 모드 및 패딩 체계)를 지정하려면 Cipher 오브젝트가 변환 문자열을 사용합니다.

  • 올바른 알고리즘 선택

변환 문자열에는 의심 할 여지없이 암호화 알고리즘의 이름이 포함됩니다. 대칭 암호화와 비대칭 암호화 사이에는 표준 알고리즘 이름 문서에 따라 지정할 수있는 11 개의 알고리즘 (다양한 PBEWithAnd 조합과 관련 없음)이 있습니다. 그중 두 개 (대칭 및 비대칭 암호화에 대해 하나씩) 만 실제로 완전히 보호됩니다.

나머지 알고리즘은 과도하게 손상되었거나 (DES, RC2 등) 균열이 표면화되기 시작하여 (RC5) 충분한 CPU 전력으로 깨질 수 있습니다.이 알고리즘을 읽을 때 이미 깨질 수 있습니다. 보안을 염두에 둔 개발자는 NIST 사양을 읽거나 암호화 커뮤니티의 최신 사건과 연구를 따를 수 없습니다. 그들은 깨지거나 위험한 알고리즘, 다이제스트 또는 의사 랜덤 생성기를 선택할 수 있습니다.

항상 :

  1. 대칭 알고리즘 : AES / AESWrap 블록 암호가 사용됩니다.

  2. 비대칭 알고리즘 : RSA가 사용됩니다.

  • 동작 모드

작동 모드는 변환의 일부이며 블록 암호에만 관련됩니다. 비대칭 암호를 사용하는 경우 ECB를 작동 모드로 사용하십시오. 이는 본질적으로이 값을 무시한다는 의미입니다. SunJCE, SunPKCS11과 같은 Java 공급자는 대칭 및 비대칭 알고리즘에 대해 기본적으로 ECB 모드를 사용합니다. 비대칭 알고리즘에는 좋지만 블록 암호에는 좋지 않습니다.

공급자는 사용 된 알고리즘에 따라 보안 기본값을 설정하도록 지시받을 수 있습니다. 대칭 암호화를 사용하여 재생 공격이나 알려진 일반 텍스트 공격으로부터 보호합니다. 또한 알고리즘을 완전히 지정하는 변환을 사용하십시오 (즉, 작동 모드 및 패딩 사용). 절대로 아래에 언급 된 것과 같은 일을하지 마십시오.

C ++에서 배열을 정렬하는 방법

위와 같이 AES 알고리즘은 ECB 작동 모드와 함께 활용되어 리플레이 공격을 매우 쉽게 만듭니다. 신규 개발의 경우 기존 작업을 수정할 가능성이 조금이라도 있다면 관련 데이터 (AEAD) 모드 (예 : GCM 및 CCM)와 함께 인증 된 암호화를 사용해야합니다. 128 비트 길이의 인증 태그가 있습니다. 인증되지 않은 모드를 사용하는 경우 MAC과 함께 CBC 또는 CTR을 사용하여 암호문을 인증합니다.

  • 적절한 패딩 구성표 선택

공통 블록 암호 모드는 기본 암호화 알고리즘의 블록 크기의 배수 인 일반 텍스트 길이를 필요로하며, 이는 드문 경우입니다. 따라서 약간의 패딩이 필요합니다.Java 프로그램은 대칭 암호화를위한 세 가지 다른 체계를 제공합니다. 하나는 허용되지 않는 No Padding이고 다른 하나는 2007 년 이후 철회 된 ISO10126Padding입니다.

따라서 유일하게 적합한 옵션은 PKCS5Padding을 사용하는 것입니다. 일부 작동 모드 (예 : CBC 모드)와 PKCS5Padding 패딩 체계의 혼합은 패딩 오라클 공격으로 이어질 수 있습니다. 패딩 체계를 전혀 언급하지 않는 것은 특정 유형의 공격에만 취약한 체계를 제공하는 것보다 더 위험합니다. 이러한 공격으로부터 사용자를 보호하려면 AEAD 작동 모드를 사용하는 것이 가장 좋습니다.

  • 비대칭 알고리즘

비대칭 알고리즘에서는 두 가지 패딩 방식 중에서 선택할 수 있습니다. OAEPWithAndPadding 체계 만 사용되도록하는 것이 중요합니다. 다이제스트의 경우 SHA1 또는 SHA256 / 384 / 512를 사용하십시오. 마스크 생성 기능 (MGF)의 경우 지정된대로 MGF1 패딩을 활용하십시오. RSA를 사용한 PKCS1Padding은 1998 년부터 Ciphertext 공격 [6]에 취약했습니다.

여기에서는 'Cipher.getInstance'메소드에서 변환을 사용하는 올바른 방법에 대해 설명합니다.

C ++ STL 인터뷰 질문
  • 대칭 암호화

  • 비대칭 암호화

모든 암호화 체계의 보안 수준은 키 크기에 정비례합니다. 키 길이는 무차별 대입 공격이 동시에 실행 불가능해질 수있을만큼 충분히 길어야합니다. 또한 계산 가능성을 염두에 둘만큼 짧아야합니다. 또한 향후 30 년 동안 컴퓨팅 발전을 견뎌 낼 수있는 요소를 고려해야합니다.

이것으로 우리는 Java의 암호화 기사의 끝입니다. 암호화 및 복호화에 대한 아이디어와 이것이 Java에서 사용되는 이유를 알고 있기를 바랍니다.

확인 전 세계에 250,000 명 이상의 만족 한 학습자 네트워크를 보유한 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 Edureka의 Java J2EE 및 SOA 교육 및 인증 과정은 Java 개발자가 되고자하는 학생과 전문가를 위해 설계되었습니다. 이 과정은 Java 프로그래밍을 시작하고 Hibernate & Spring과 같은 다양한 Java 프레임 워크와 함께 핵심 및 고급 Java 개념 모두에 대해 교육하도록 설계되었습니다.

질문이 있으십니까? 이 '자바 암호화'블로그의 댓글 섹션에 언급 해 주시면 가능한 한 빨리 연락 드리겠습니다.