Choose a default theme

You can change your theme from the menu

암호학

Parent category

Category nameModifiedArticles
컴퓨터 과학과 프로그래밍0

Subcategories

No items have been published yet.

Articles

TOTP는 HOTP의 이동 인자를 시간 구간으로 바꾼 일회용 비밀번호 알고리즘이다. RFC 6238에 정의된다. 현재 시각에서 기준 시각을 빼고 정해진 시간 간격으로 나눈 값을 카운터로 사용한다. 생성기와 검증기는 같은 비밀 키 및 시간 설정을 공유한다. 인증 앱과 서버가 30초 간격을 사용하면 해당 구간에 대응하는 코드를 계산할 수 있다. 서버는 정책에 따라 제한된 시계 오차 범위를 허용한다. 시간이 지나면 바뀌는 코드도 피

0

HOTP는 공유 비밀 키와 증가하는 카운터로 일회용 비밀번호를 생성하는 알고리즘이다. RFC 4226에 정의된다. 카운터를 HMAC-SHA-1 입력으로 처리한 뒤 지정된 절차로 짧은 숫자 코드를 만든다. 생성기와 검증기는 대응하는 카운터 상태를 관리한다. 사용자가 인증 장치의 버튼을 누를 때마다 카운터가 진전하고 서버가 허용 범위의 코드인지 확인하는 구성을 만들 수 있다. 짧은 코드에는 온라인 추측 제한이 필요하다. 재사용 방

0

X.509 인증서는 주체의 공개 키와 식별 정보 등을 발급자의 서명으로 연결하는 형식이다. 인터넷 PKI의 프로파일은 RFC 5280에 정리되어 있다. 인증서에는 유효 기간과 확장 정보 등이 포함된다. 검증자는 신뢰 앵커를 출발점으로 서명과 인증 경로의 제약을 검사한다. 서버 인증서의 공개 키를 신뢰할 수 있는 발급 경로와 연결하여 통신 상대를 검증하는 구성에 사용한다. 응용 프로토콜은 이름 확인 같은 추가 규칙을 적용한다.

0

TLS 1.3은 통신 당사자 사이에 인증과 기밀성·무결성을 제공하도록 설계된 보안 전송 프로토콜이다. RFC 8446에 정의된다. 핸드셰이크에서 알고리즘과 키 자료를 정하고 레코드 계층에서 데이터를 보호한다. 인증서나 사전 공유 키 등 사용 방식에 따라 인증 절차가 달라진다. HTTPS 연결에서 브라우저와 서버가 보안 매개변수를 합의한 뒤 HTTP 데이터를 보호하는 데 사용될 수 있다. 암호화된 연결이 응용 프로그램의 모든 취

0

Ed25519는 Edwards 곡선 기반 전자서명 방식인 EdDSA의 구체적인 구성이다. 개인 키로 서명하고 공개 키로 검증한다. 메시지와 비밀 키 자료로 서명 값을 만들며 검증자는 공개 키와 메시지로 서명의 유효성을 확인한다. RFC 8032는 변형과 인코딩, 테스트 벡터를 정의한다. 배포 파일의 메시지나 식별 정보를 서명해 받은 쪽이 신뢰한 공개 키로 검증하는 구성에 사용할 수 있다. 서명은 메시지의 내용을 숨기는 암호화가

0

X25519는 Curve25519에 기반해 공유 비밀 자료를 계산하는 타원 곡선 Diffie–Hellman 함수이다. RFC 7748에 정의된다. 각 참여자는 자신의 비밀 입력과 상대의 공개 입력으로 같은 공유 결과를 얻는다. 이후 키 유도 함수와 프로토콜 문맥을 사용해 실제 통신 키를 만든다. 보안 통신의 핸드셰이크에서 임시 키를 교환하고 공유 자료를 계산하는 데 활용할 수 있다. 개인 비밀 값 자체를 전송할 필요는 없다.

0

scrypt는 비밀번호에서 키를 유도할 때 계산과 메모리 비용을 함께 요구하도록 설계된 함수이다. RFC 7914에 동작과 테스트 벡터가 제시된다. N, r, p 같은 매개변수가 비용과 처리 방식에 영향을 준다. 메모리를 많이 사용하는 구조로 대량의 비밀번호 추측에 드는 자원 비용을 높인다. 비밀번호 기반 저장 형식에서 salt와 비용 매개변수를 결과와 함께 기록하면 검증 시 같은 설정으로 계산할 수 있다. 메모리 비용을 높이

0

PBKDF2는 비밀번호와 salt, 반복 횟수 등을 입력으로 키를 유도하는 비밀번호 기반 함수이다. RFC 8018에 정의된다. 의사난수 함수를 반복 적용하여 추측 한 번의 계산 비용을 늘린다. 사용한 함수와 반복 횟수, salt, 출력 길이를 함께 알아야 같은 결과를 재현할 수 있다. 암호화된 파일의 잠금 비밀번호에서 키를 유도할 때 매개변수를 파일 형식과 함께 기록할 수 있다. 같은 비밀번호라도 salt가 다르면 결과가 달

0

HKDF는 HMAC을 기반으로 입력 키 자료에서 필요한 암호 키를 유도하는 함수이다. RFC 5869에 추출과 확장 단계가 정의되어 있다. Extract는 입력 자료에서 고정 길이 의사난수 키를 만들고 Expand는 문맥 정보와 함께 필요한 길이의 출력을 만든다. 용도별 문맥을 구분할 수 있다. 키 교환으로 얻은 공유 자료에서 송신용과 수신용 키를 서로 다른 문맥 정보로 유도하는 프로토콜을 구성할 수 있다. 입력에 없던 엔트로

0

SHAKE는 SHA-3 표준에 포함된 확장 출력 함수 계열이다. SHAKE128과 SHAKE256이 있으며 필요한 출력 길이를 지정한다. 고정 길이 해시와 달리 출력 길이를 사용 문맥에서 정한다. 이름의 숫자는 출력 비트 수 자체를 뜻하지 않는다. SHAKE128에서 256비트 출력을 요청할 수 있다. 프로토콜은 알고리즘 이름뿐 아니라 출력 길이와 입력 인코딩도 함께 정해야 한다. 출력을 길게 만든다고 보안 강도가 무한히 증가

0

SHA-3는 Keccak에 기반한 해시 함수 계열로, NIST FIPS 202에 정의되어 있다. SHA-2와 내부 구조가 다르다. SHA3-224·SHA3-256·SHA3-384·SHA3-512는 고정 길이 출력을 제공한다. 스펀지 구성으로 입력을 흡수하고 출력을 생성한다. SHA3-256과 SHA-256은 모두 256비트 결과를 내지만 서로 다른 알고리즘이므로 같은 입력의 해시값을 교환 가능한 것으로 취급할 수 없다. 일반

0

ChaCha20-Poly1305는 ChaCha20 암호화와 Poly1305 인증을 결합한 AEAD 구성이다. 암호문과 부가 인증 데이터에 대한 인증 태그를 만들며, 수신자는 키와 nonce 및 부가 데이터로 검증한다. RFC 8439에 구성과 테스트 벡터가 제시된다. 본문을 숨기면서 요청 종류나 프로토콜 버전 같은 공개 헤더를 인증 대상에 포함하는 방식으로 사용할 수 있다. 같은 키에서 nonce를 재사용하지 않아야 한다. 직

0

ChaCha20은 덧셈·회전·XOR 연산을 사용하는 스트림 암호이다. RFC 8439는 IETF 프로토콜용 구성을 정의한다. 해당 구성은 256비트 키와 96비트 nonce, 블록 카운터를 사용한다. 키 스트림과 평문을 XOR해 암호화한다. 같은 키를 유지하면서 메시지를 처리하려면 nonce가 겹치지 않는 관리 체계를 마련하고 카운터 범위도 지켜야 한다. ChaCha20만 사용하는 것과 ChaCha20-Poly1305 인증 암

0

AEAD는 암호화할 데이터와 암호화하지 않을 부가 데이터를 함께 인증하는 인증 암호 인터페이스 또는 구성이다. 평문을 암호문으로 보호하고 인증 태그로 변조를 검증한다. 부가 인증 데이터는 숨기지 않으면서 해당 암호문과의 연결을 보호한다. 메시지 본문은 암호화하되 프로토콜 헤더를 부가 인증 데이터로 넣으면 헤더의 노출을 허용하면서 변경은 검출할 수 있다. 인증 실패 시 평문을 신뢰해서는 안 된다. nonce 조건과 사용량 제한은

0

CTR 모드는 서로 다른 카운터 블록을 블록 암호로 처리해 만든 스트림을 평문과 XOR하는 운용 모드이다. 각 블록의 카운터 입력을 독립적으로 계산할 수 있어 병렬화가 가능하다. 메시지 끝의 일부 블록도 필요한 길이만큼 처리할 수 있다. 같은 키로 여러 메시지를 암호화할 때에는 메시지를 구분하는 값과 블록 번호의 조합이 겹치지 않도록 설계한다. 같은 키에서 카운터 블록을 재사용하면 같은 키 스트림이 생긴다. CTR 자체에는 변

0

CBC 모드는 평문 블록과 이전 암호문 블록을 XOR한 뒤 블록 암호를 적용하는 운용 모드이다. 첫 블록에는 초기화 벡터를 사용한다. 이전 블록의 결과가 다음 암호화에 연결된다. 임의 길이 메시지에는 블록 경계를 맞추는 패딩 등의 규칙이 필요하다. 같은 메시지라도 적절히 달라지는 IV를 사용하면 첫 블록부터 다른 암호문을 얻을 수 있다. IV는 키와 다른 역할을 한다. CBC의 IV는 해당 모드가 요구하는 예측 불가능성 조건을

0

ECB 모드는 블록 암호를 각 평문 블록에 독립적으로 적용하는 운용 모드이다. 같은 키에서 같은 평문 블록은 같은 암호문 블록이 된다. 블록 간 연결이 없다. 반복되는 데이터 블록을 암호화하면 출력에서도 같은 블록이 반복되어 데이터의 구조가 드러날 수 있다. 일반적인 구조화 메시지를 숨기는 용도로 ECB를 선택하면 패턴 노출 문제가 생긴다. 별도의 인증도 제공하지 않으므로 알고리즘 이름만 보고 안전하다고 판단하지 않는다.

0

스트림 암호는 키로부터 생성한 키 스트림을 평문과 결합하여 암호문을 만드는 대칭키 암호의 부류이다. 대표적인 구성은 평문과 키 스트림을 XOR한다. 복호화에서는 같은 스트림을 다시 결합하므로 키와 nonce 등의 입력을 올바르게 관리해야 한다. ChaCha20은 키·nonce·카운터를 이용해 스트림을 생성한다. 메시지 길이만큼의 스트림으로 데이터를 처리할 수 있다. 같은 키 스트림을 다른 메시지에 재사용하면 평문 사이의 관계가

0

블록 암호는 비밀 키와 고정 길이 입력 블록으로 같은 길이의 출력 블록을 만드는 대칭키 암호의 부류이다. AES처럼 블록 길이와 키 길이가 별개인 알고리즘이 있다. 한 블록보다 긴 메시지를 다루려면 운용 모드와 필요한 인코딩 규칙을 함께 정한다. AES는 128비트 블록을 처리한다. AES-256이라는 이름의 256은 키 길이이며 한 번에 암호화하는 블록 길이를 뜻하지 않는다. 블록 암호 알고리즘만 선택했다고 전체 메시지의 안

0

Argon2는 비밀번호 해싱 등에 사용하는 메모리 집약적 함수이다. 비밀번호 추측에 필요한 계산 비용을 높이기 위해 메모리와 반복 횟수, 병렬 처리 정도를 매개변수로 다룬다. RFC 9106은 Argon2id와 관련 변형을 설명한다. 가입 시 비밀번호와 솔트, 비용 매개변수로 검증값을 계산한다. 로그인에서는 입력한 비밀번호에 같은 설정을 적용해 저장된 값과 비교한다. 원래 비밀번호를 복호화해서 꺼내는 방식과 다르다. 솔트는 비

0

HMAC은 암호학적 해시 함수와 공유 비밀 키를 사용해 메시지 인증 코드를 만드는 구성이다. 키를 아는 상대가 메시지에 대한 태그를 계산하고 검증한다. 메시지 내용을 숨기는 암호화와는 역할이 다르다. 메시지와 키를 표준화된 내부·외부 해시 구조로 처리한다. HMAC-SHA-256처럼 이름 뒤에 사용하는 해시 함수를 붙여 구체적인 구성을 나타낸다. 단순히 비밀 문자열과 메시지를 이어 붙여 해시한 것을 HMAC이라고 부르지는 않는

0

SHA-256은 입력 데이터를 256비트 길이의 해시값으로 변환하는 SHA-2 계열 함수이다. 같은 바이트 입력에는 같은 출력이 나오며, 일반적인 암호화처럼 키로 원문을 복호화하는 기능은 제공하지 않는다. 입력이 길어져도 출력 길이는 256비트, 즉 32바이트이다. 16진수로 표시하면 64자리지만 이는 표시 형식의 차이이지 추가적인 보안 강도가 아니다. 줄바꿈이나 문자 인코딩이 달라지면 입력 바이트가 바뀌므로 결과도 달라질 수

0

RSA는 공개키와 개인키를 이용하는 암호 기법이다. 공개키 암호화와 전자서명에 사용되는 구성 방식이 있으며, 실제 사용에서는 수학적 연산뿐 아니라 메시지 인코딩과 매개변수까지 포함한 방식이 중요하다. 공개키는 공개 가능한 정보를 담고 개인키는 비밀로 유지한다. 암호화에서는 수신자의 공개키로 보호한 내용을 해당 개인키로 복호화하는 구성을 사용한다. 서명에서는 서명자의 개인키로 생성한 서명을 공개키로 검증한다. 두 목적의 절차를

0

AES는 같은 비밀 키를 사용하는 대칭키 블록 암호이다. NIST의 FIPS 197에 정의되며, AES-128·AES-192·AES-256은 각각 키 길이를 나타낸다. 세 종류 모두 한 번에 처리하는 블록의 크기는 128비트이다. AES-256이라는 이름의 256은 블록 크기가 아니라 키의 비트 수이다. 암호는 키와 입력 블록을 바탕으로 출력 블록을 계산한다. 실제 파일이나 메시지는 한 블록보다 길 수 있으므로 여러 블록을 어

0