Welcome to Our Website

암호화 101: 대칭 암호화

이것은 첫 번째 포스트에서 3 시리즈에서의 기초를 암호화 합니다. 이 시리즈는 다음과 같이 설명:

  1. 대칭 암호화
  2. 데이터 무결성&인증 암호화
  3. 비대칭 암호화와 함께 공개/개인 키 쌍

다이빙으로 전 세계 컴퓨터 과학의 수 있는 것은 어려운 작업이 될 수 있습니다. 특히 혼자!, 이 시리즈 블로그,내가 제안하고 싶으면 높은 수준의 개관의 기초에 대한 암호화를 찾는 사람들을 탐구한 주제로 하지 않는 반드시 어디서부터 시작 해야할지 모르겠. 이 개관은 기반에 구체적으로 내 주요 테이크 아웃에서 스탠포드의 암호화 나는 과정으로 가르치는 댄 보네에서 사용할 수 있 코 세라.

저는 전통적인 comp-sci 배경에서 오지 않은 블록 체인 개발자이기 때문에이 과정을 수강하기로 결정했습니다. 나는 대학에서 경제학을 공부했지만 경력을 시작하면서 컴퓨터 프로그래밍에 더 많은 방향을 돌 렸습니다., 이후 나는 코딩을 시작했을 얻을 수있는 임무에게 가까이”컴퓨터”—껍질이 다시 추상화 계층이 즐겼는 웹 개발자와 무슨 일이 일어나고 있는지 이해 아래에 있습니다. 으로 전환 암호 화폐과 분산 시스템에서 웹 개발되었습 야생과 멋진 단계에서는 방향을 여러 가지 방법으로,적어도는 점점 더 잘 알고의 개념을 암호화 합니다. 그러나 나는 더 견고한 기초를 원했습니다., 이후 그것은 매우 방대한 분야,나는 생각은 그것에 가치가 드롭$70 소비하는 이 정보에서 포럼을 특별히 기획부터 스탠포드 대학교도 있습니다. 과제를 무료로 전달하지 않고이 과정을 감사 할 수도 있습니다. 인터넷의 경이로움!

시작하자.

본질적으로 암호화는 잠재적 인 제 3 자 적들의 면전에서 안전한 통신의 관행입니다. 보안 통신의 개념은 다음과 같은 2 가지 주요 포인트로 구성됩니다.

  1. 도청에 대한 보안:이는 데이터 기밀성을 보장합니다.,
  2. 보안에 대한 데이터 조작:이 데이터 무결성을 보장하는 의미 없는 하나의 데이터를 조작 할 수 있습을 보내고 속이는 받는 사람으로 받아들이 조작된 데이터로 유효합니다.

데이터 기밀성은 암호화를 통해 달성되며 대칭 및 비대칭의 두 가지 형태를 취할 수 있습니다.

  • 대칭 암호화는 통신하는 모든 참가자들 사이에서 공유해야하는 하나의 단일 키를 사용합니다.
  • 비대칭 암호화는 개인 키를 사용합니다., 각 참가자는 통신 할 때 메시지를 암호화하고 해독 할 수있는 자체 공개 키와 개인 키 쌍을 가지고 있습니다.

(참고:이 블로그 게시물은 대칭 암호화의 맥락에서 암호화에 대해 이야기 할 것입니다. 후속 게시물에서 비대칭 암호화에 뛰어들 것입니다.)

데이터를 암호화:두 종류의 암호

암호화 데이터의 기밀성을 보장하고는 두 개의 중요한 구성 요소:

  1. 비밀 키:컨텍스트에서의 대칭 암호화,우리가 추측할 수 있는 우리의 참가자,앨리스와 밥,공유입니다.,
  2. 암호:암호 해독을위한 알고리즘 세트와 암호 해독을위한 알고리즘 세트.

암호화 및 암호 해독 알고리즘이 공개적으로 알려져 있다는 점에 유의하는 것이 중요합니다. 비밀로 유지되는 유일한 것은 열쇠입니다.

두 가지 유형의 암호는 스트림 암호와 블록 암호입니다. 이 두 암호를 적절하게 이해하기위한 잠재적 인 전제 조건은 비트 연산(비트에서 수행되는 연산)에 대한 지식입니다. 보다 구체적으로,독점적 인 개념-또는(XOR). 비트 연산에 대한 매우 명확한 설명을 제공하기 위해이 블로그 게시물을 발견했습니다., 또는 아래 그림을 사용하여 XOR 의 개념을 이해하려고 시도 할 수 있습니다. 기본적으로 두 개의 비트가 결합되고 서로 다른 경우(하나는 0 과 1)그들은 결과,1 에서와 동일한 경우에는,(모두 0 의 또는 모두 1)그들은 결과에서 0. 여기에서,나는 가정의 독자의 개념을 이해하고 XOR 과는 보편적인 표기에 대한 XOR:⊕

스트림 암호

스트림이 암호화는 대칭키 암호화는 일반 텍스트(바이트 단위 양식)은 XOR 고 조금씩 가진 키(도에서 바이트 form)을 생산하는 암호화된 암호., 동일한 프로세스가 암호문을 해독하는 데 사용됩니다. XOR 연산의 특성을 감안할 때,우리가 키로 암호문을 XOR 하면 원래의 평문으로 다시 결과가됩니다.

기민한 독자가 실현에서 이 설명하는 키(레이블에서 위의 그림으로”암호화 스트림”)및 일반 텍스트가 있어야에 아주 중요한 일이 일반적입니다. 맞아! 키와 일반 텍스트의 길이는 동일해야 합니다., 물론 이것은 매우 실용적이지 않습니다.

스트림 암호를보다 실용적으로 만들기 위해 pseudorandom 생성기의 아이디어가 도입되었습니다. Pseudorandom 생성기는 입력을 받아 더 긴 pseudorandom 결과를 출력하는 결정 론적 절차입니다. 되는 결정적 절차에 즉 그것은 항상 동일한 정확한 출력은 주어진 경우 동일한 입력을(즉,”abc123″결과에”8474f24e0d72e1b949ffd2…”모든 시간)., 어 의사 난수는 그 동안 출력하지 않은 실제로 무작위(기 때문에 따라 결정된 특정 입력),이 사실을 구별할 수 없는 진정한 임의의 문자열입니다. 다시 말해서,주의 샘플을 입력 및 출력에 단서가 없으로 출력에 해당하는 특정 입력하고 그 반대로,따라서 그것이 의사 난수. 공유 비밀 키를 입력으로 사용하여 더 긴 pseudorandom 키를 생성하여 똑같이 긴 일반 텍스트로 XOR’d 할 수있는 긴 키 역할을 할 수 있습니다.,

우리가 지금까지 설명한 스트림 암호의 이러한 특정 구현을”일회성 패드”라고합니다. 1 회용 패드의 매우 중요한 특징은 1 회용 패드 키를 한 번만 사용할 수 있다는 것입니다. 두 번째로 사용되면 이러한 메시지의 보안이 손상됩니다.

아래 사진은 코스의 슬라이드입니다. PRG(K)는 우리의 공유 키 K 에서 생성 된 pseudorandom 시퀀스를 나타냅니다. c 는 암호문을 나타냅니다. m 은 메시지(또는 일반 텍스트)를 나타냅니다.,

기본적으로, 이 슬라이드가 말하는 한 키를 사용하는 두 번,우리가 할 수 있습 XOR 의 암호문 함께,그것은 정확히 동일하 XOR’ing 두 plaintexts 함께. 영어로 충분한 중복성이 있기 때문에 정통한 공격자는이 정보를 사용하여 메시지를 완전히 복구 할 수 있습니다.

하나의 공유 비밀 키를 유지하기 위해 nonce 의 개념을 사용하여 일회성 패드 키를 반복하지 않도록 할 수 있습니다., Nonce 는 암호화 통신에서 한 번만 사용할 수있는 임의의 숫자입니다. 를 보낼 때는 암호문을 보낸 사람을 보낼 수도 있습 nonce 를 통과 결합되는 비밀키를 사용하여 입력으로 생산하는 고유한 의사 난수 위해 암호화 합니다.

(위의 슬라이드가 공격 1 이라고 말한 것을 눈치 챘을 수도 있습니다., 옆으로,궁금 사람들을 위해 무엇을 공격 2,2 공격이 사실 그 동안 스트림 암호를 제공하는 데이터의 기밀성을 제공하지 않습니다 데이터 무결성으로 정의 첫 번째 섹션에서는)

블록 암호

두 번째 유형의 암호화은 블록 암호화를 사용하여 암호화됩니다. 블록 암호에서 고정 길이를 입력 및 반복적으로 암호화하는 일반 텍스트 또 다시 사용하여 다른 키(“라키”)각 라운드에 대한 궁극적으로 출력한 암호의 길이 있습니다. 3DES 및 AES 는 각각 48 비트 및 128 비트의 입력을 취하는 블록 암호의 두 가지 예이다.,

슬라이드 위에 보여줍니다 기본적인 건물에 대 한 블록 암호화를 사용하여 암호화됩니다. 키 확장 메커니즘이 매 라운드마다 새로운 키를 갖는 데 사용된다는 것을 알 수 있습니다. 메시지에 대해(m)로 표시된 일반 텍스트는 마지막으로 동일한 길이의 해당 암호문(c)이 반환 될 때까지 계속해서 암호화됩니다.

간결함을 위해서는이 블로그 포스트에서 AES 를 다룰 것입니다., Des/3DES 는 역사적으로 중요하지만 오늘날 AES 는 더 널리 사용되고 받아 들여지고 있습니다.

AES 장으로 대체 En 네트워크입니다. AES 는 16 바이트와 동일한 128 비트 블록에서 작동합니다. 왼쪽 상단의 위 사진과 같이 16 바이트를 4×4 행렬로 씁니다. 이 행렬은 데이터를 뒤섞기에 좋은 데이터 구조 역할을합니다., 각 라운드에서 프로세스는 다음과 같습니다:

  1. 우리는 XOR 라운드 키(k0),현재 메시지
  2. 그리고 이동을 통한 대체 프로세스는 데이터 블록으로 대체 기타 블록을 기반으로 주어진 교체 테이블(위 사진(1)ByteSub).
  3. 우리는 우리를 통해 이동 en 층는 비트가 변경하는 단행위(위 그림(2)ShiftRow&(3)MixColumn).
  4. 그런 다음 10 라운드 동안이 과정을 반복합니다.,

위의 사진에,당신은 알 수 있는 마지막 라운드 건너뛰 혼합 열 단계,XOR 의 결과로 우리의 최종 라운드 키를 출력한 우리의 결과 암호. 해독하기 위해,우리는 단순히 과정을 반전. 코스를 제공 높은 수준의 개요를 이 암호화 프로세스 및 장려는 학생들을 더 깊이 있는 경우에는,그것의 관심입니다. 따라서,나는 이것에 AES 내부 동작을 남겨 둘 것이다. 나는 사람들이 다른 블록 암호의 재미 비교 및 대비를 위해 3des 의 Fiestel 네트워크 절차를 들여다 볼 것을 권합니다.,

측면에서의 하드웨어의 시작 인텔은 웨스트미어,인텔은 그들의 디자인 프로세서와 함께 특별 지침에 대한 AES 최적화 내장이 바로 그들의 하드웨어 및 AMD 맞이하의 계정을 정지 시킬 수 있습니다.

블록 암호화 작동 모드

과는 달리 스트림 암호,블록 암호만 고정 길이를 입력합니다. 분명히 우리는 한 번에 16 바이트보다 큰 데이터를 처리하려고합니다. 따라서 다음으로 블록 암호를 사용하여 큰 데이터 세트를 암호화 할 수있는 작동 모드를 이해하는 것이 중요합니다., 이 블록 암호를 큰 데이터 세트에 적용하려면 마음에 올 수있는 첫 번째 작동 모드를”전자 코드 북”(ECB)이라고합니다. ECB 는 단순히 데이터를 16 바이트 블록으로 나누고 aes 암호화를 균일하게 수행합니다. 심지어 병렬로 할 수도 있습니다. 매우 빠릅니다! 그러나 실제로는 매우 안전하지 않습니다.

그것이기 때문에 안전하지 않은 경우에는 16 바이트로 메시지가 반복하고,암호문을 것입니다 또한 반복되는 데이터입니다., 이것은 우리의 데이터에 대한 정보를 잠재적 인 공격자에게 누설합니다. 우리는 ECB 로 이미지를 암호화하는 경우에이 취약점을 적용 할 수 있습니다. 아래에서 볼 수 있듯이 우리의 이미지가 헤드 샷임이 분명합니다. 무겁게 검은 색 영역에서 우리는 검은 머리카락과 셔츠를 통해 실루엣을 볼 수 있습니다.

하는 것이 중요 우리의 암호화 방식은 의미상으로 안전합니다., Semantic 보안하는 개념이 있는 경우에 우리는 암호문 중 하나에 해당하는 두 개의 서로 다른 plaintexts,는 상대를 추측할 수 없는 더 나은 확률 1/2 는 일반 텍스트의 암호에 해당합니다. 분명히 ECB 는 의미 상 안전하지 않습니다. 우리의 암호화 된 이미지는 우리에게 해당 일반 이미지를 추측 할 수있는 많은 정보를 제공합니다.

ECB 의 예시-중요한 형태의 작업을(즉,같은 시간 패드,키 한 번만 사용할 수 있습니다). 또 다른보다 안전한 일회성 키 작동 모드는 결정 론적 카운터 모드입니다. 당신은 당신의 자신에 그것을 들여다 무료입니다., 나는 많은 시간 키를 가능하게하는 안전한 작동 모드로 넘어갈 것입니다!

암호 블록 체인(CBC)은 동작 모드는 사슬을 각 16 바이트 블록의 일반 텍스트를 통해 함께 XOR’ing 암호문의 이전 일반 텍스트로는 우리의 현재 일반 텍스트를 수행하기 전에 블록 암호화한 암호화(즉,AES). 아래 이미지를 명확히 이 개념을 이해할 수 있습니다.

우리는 처음으로 시작하는 임의의 IV., IV 는 다음과 같이 정의 할 수있는 초기화 벡터를 의미합니다:일부 반복 프로세스를 시작하는 데 사용되는 초기 값. CBC 의 경우 IV 는 무작위(따라서 예측할 수 없음)여야하므로 각 트랜잭션마다 고유해야합니다. 의 첫 번째 블록 암호화하는 암호화되지 않은 임의의 IV. 을 생산하는의 나머지 부분 암호문을 먼저,임의의 IV XOR 것으로 일반 텍스트의 첫 번째 블록(m). 그런 다음 결과는 라운드 키 k 로 암호화되어 암호화 된 암호문(c)의 첫 번째 블록을 반환합니다., 는 암호문가 XOR 것으로 다음 블록의 일반 텍스트(m)결과 암호화와 함께 라운드 키 k 반환하는 두 번째 블록 암호화된 암호문(c). 모든 블록이 암호화 될 때까지 프로세스가 계속됩니다.

암호 해독,우리는 반대의 과정입니다.

CBC 암호화의 중요한 구성 요소는 무작위 IV 가 예측할 수 없다는 것입니다., IV 가 예측 가능 해지면 암호화 체계가 선택한 일반 텍스트 공격에 취약 해집니다. 선택 일반 텍스트 공격(CPA)공격 모델 presumes 공격을 얻을 수 있습니다 암호문에 대한 임의의 plaintexts 및 이러한 사용을 공개하는 정보에 대해 암호화된 메시지입니다. 따라서 CPA 보안을 보장하기 위해 예측할 수없는 IV 가 필요합니다.

곰이 나와 함께 여기에 나가는 방법을 설명하려고 이 공격은 일이 가능합니다:를 수행하는 일반 텍스트에서 공격의 존재 예측 가능한 IV 때문에 자연의 XOR., 동일한 값을 함께 XOR 하면(0101⊕0101)항상 0 과 같으므로 취소됩니다. 그렇다면 의심할 수 있도록 하고 있습니다 암호문 c 에 해당하는 특별한 일반 텍스트 m 테스트할 수 있습니다 당신의 가설과 예측 가능한 IV. 는 경우의 일반 텍스트에 질문을 암호화되었으로 IV1 는 c=E(k,m⊕IV1)제출할 수 있는 새로운 일반 텍스트를 암호화하고 볼 수를 얻을 경우에 일치하는 결과:c. 할 수 있기 때문에 예측 IV 될 것입니다 IV2,당신을 제출 m⊕IV1⊕IV2., CBC 프로세스 XOR 이 입력으로 다음 IV,IV2 는 c=E(k,m⊕IV1⊕IV2⊕IV2)따라서 IV2 취소,그리고 다시 한번 우리를 암호화하 E(k,IV1⊕m)는 결과에 다시한번 c 그리고 이런 일이 발생하는 경우,우리는 할 수 있었다 무엇을 추측하는 이전에 암호화된 IV1.

정말 멋진 일이 경우에 당신을 통해 얻었는^

가고 싶을 검토 중 하나 더 많은 블록 암호화 작동 모드하는 결론 지을 것이다 첫번째 블로그 게시물에 이 3 부 시리즈입니다. 만약 이것이 큰 노력을 기울인 만들,그것은 지금 할 수있는 좋은 시간이 될 수 있습니다에 대한 짧은 휴식을 계속하기 전에!,

Ok,so we 검토 ECB,CBC,그리고 그들의 취약점하지만,마지막으로,그리고 아마도 가장 중요한 것은 내가 소개하는 무작위 카운터 모드(CTR). 이것은 최신의 가장 안전한 작동 모드이며 CBC 보다 효율적입니다.

무작위 카운터 모드는 또한 임의의 IV. IV 를 다른 목적지. 우리의 키가 결합됩니다(예:, 을 통해 AES)으로 반복되는 버전은 우리의 IV:위에서 우리는 계속 추가 1 리 IV 각 반복,또는 다른 것이 우리를 얻을 반복한 결과입니다. 우리는 우리의 일반 텍스트 메시지만큼 패드가있을 때까지이 작업을 수행합니다. 처럼 하드 스트림 암호,우리는 지금 XOR 우리의 일반 텍스트 메시지로 우리의 의사 난수 pad 결과 암호. 하드웨어에 여러 개의 AES 엔진이있는 경우 병렬 처리가 가능하기 때문에 매우 효율적입니다. CBC 에서 각 암호문은 암호문의 이전 블록에 의존하여 병렬화하는 것이 불가능했습니다.,

우리는 반드시 우리의 IV 와 키를 pseudorandom 패드에 결합하기 위해 블록 암호가 필요하지 않습니다. 블록 암호는 뒤집을 수 있어야합니다. If you look closely at 의 역학 무작위 카운터 모드를 알 수 있는 암호 해독을 필요로 하지 않게 역에는F(k, IV). XOR 의 본질을 감안할 때,우리가해야 할 일은 동일한 pseudorandom 패드를 재생성하고 우리의 암호문으로 XOR 하는 것입니다. 따라서 암호를 해독하기 위해서는 역전되지 않고 작업을 반복해야합니다.,

추상적으로 말하기(도 피이상),는다는 것을 의미하는 절차에 우리가 사용하여 결합하는 우리의 비밀을 키고 IVF(k, IV)어야 합 의사 난수는 함수(PRF)반대로 난 순열(PRP). 우리는 실제로이 블로그 게시물 전체에 이러한 개념을 적용 해 왔습니다. Prp 와 Prf 는 모두 특정 입력이 주어지면 의사 랜덤 출력을 초래하는 결정 론적 절차입니다. (즉,AES,XOR). 그러나 PRP 는 가역적이어야한다는 의미에서 더 엄격합니다., 실제로 PRP 및 블록 암호(예:AES)라는 용어는 종종 동의어로 사용됩니다. 그러나 PRF 는 뒤집을 필요가 없습니다. 이 게시물에 표시된 이전 슬라이드로 다시 돌아 가면 이제 prf 및 PRP 표기법을 이해할 수 있습니다.

그게 대칭 암호화에 대한 나의 개요를 결론 짓는다! 우리는 스트림 암호와 블록 암호를 다루었습니다. 그런 다음 이후 블록 암호화에 대해서만 수행할 수 있습에 대한 16 바이트 시,우리가 적용되는 모드의 동작을 수행하는 데 사용되는 블록 암호화에 큰 plaintexts. 우리는 또한 PRPs 대 PRFs 의 개념을 명확히했습니다.피>

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다