c 언어 des 예제

crypt_r 함수는 crypt와 동일한 작업을 수행하지만 결과에 대한 공간을 포함하는 추가 매개 변수를 사용하므로 재진입 할 수 있습니다. data->초기화는 crypt_r이 처음 호출되기 전에 0으로 지워야 합니다. 아이디어! RSA의 아이디어는 큰 정수를 팩터링하기가 어렵다는 사실에 근거합니다. 공개 키는 하나의 숫자가 두 개의 큰 소수의 곱셈인 두 개의 숫자로 구성됩니다. 그리고 개인 키는 동일한 두 개의 소수에서 파생됩니다. 따라서 누군가가 많은 수를 고려할 수 있다면 개인 키가 손상됩니다. 따라서 암호화 강도는 키 크기에 완전히 달려 있으며 키 크기를 두 배 또는 세 배로 늘리면 암호화 강도가 기하급수적으로 증가합니다. RSA 키는 일반적으로 1024 비트 또는 2048 비트 길이일 수 있지만 전문가들은 가까운 장래에 1024 비트 키가 깨질 수 있다고 믿습니다. 그러나 지금까지는 불가능한 작업인 것 같습니다. crypt 함수는 암호, 키, 문자열 및 아래에 설명된 솔트 문자 배열을 사용 하 고 다른 소금으로 시작 하는 인쇄 가능한 ASCII 문자열을 반환 합니다. 함수의 출력을 감안할 때 해당 출력을 생성하는 키를 찾는 가장 좋은 방법은 키의 원래 값이 발견 될 때까지 키값을 추측하는 것입니다.

블록과 키는 8비트 바이트로 포장되므로 키의 첫 번째 비트는 가장 중요한 키 비트[0]이고 키의 63번째 비트는 가장 중요하지 않은 키 비트로 저장됩니다[7]. 키에 올바른 패리티가 있어야 합니다. 그렇지 않으면 모든 매개 변수는 ecb_crypt의 매개 변수와 유사합니다. 이러한 설정키 및 암호화의 재진입 버전입니다. 유일한 차이점은 확장된 버전의 키를 저장하는 추가 매개 변수입니다. setkey_r을 처음 호출하기 전에 초기화된 data->를 0으로 지워야 합니다. 이것은 원래 일반 텍스트 블록의 비트 위치의 저글링에 불과합니다. 그림에 표시되는 다른 모든 비트 위치에대해 동일한 규칙이 적용됩니다.

그러나 DES는 56비트 키(패리티 비트+8개)만 사용하며, 1998년에 기계가 구축되어 약 6일 만에 가능한 모든 키를 검색할 수 있으며, 이는 약 US$200000의 비용이 듭니다. 더 빠른 검색은 더 많은 돈으로 가능할 것입니다. 따라서 대부분의 경우 간단한 DES가 안전하지 않으며 NIST는 더 이상 새로운 미국 정부 시스템이 간단한 DES를 사용하도록 허용하지 않습니다. CBC 모드에서 암호화의 경우 각 블록은 암호화되기 전에 ivec로 배타적 또는 지인된 다음 ivec가 암호화 결과로 대체된 다음 다음 블록이 처리됩니다. 암호 해독은 이 프로세스의 반대입니다. 그러나 경우에 따라 사용자가 특정 사용자 ID로 로그인하기 위해 컴퓨터가 제공하는 일부 서비스를 사용할 수 있는 권한이 있는지 확인해야 합니다(사용자 및 그룹 섹션 참조). 이 작업을 수행하는 한 가지 전통적인 방법은 각 사용자가 비밀 암호를 선택하는 것입니다. 그런 다음 시스템은 사용자라고 주장하는 사람에게 사용자의 암호가 무엇인지 물어볼 수 있으며, 사용자가 올바른 암호를 제공하면 시스템이 적절한 권한을 부여할 수 있습니다. DES가 56 비트 키를 사용한다는 언급이 있습니다. 실제로 초기 키는 64비트로 구성됩니다.

그러나 DES 프로세스가 시작되기 도 전에 키의 8비트마다 56비트 키를 생성하기 위해 버려지게 됩니다. 즉 비트 위치 8, 16, 24, 32, 40, 48, 56 및 64는 폐기된다. DES 암호화 사용에는 두 단계가 있습니다. 첫 번째는 DES_cblock 형식의 키(홀수 패리티가 있는 8바이트)에서 DES_key_schedule을 생성한 것입니다. 각 바이트에서 가장 중요한 비트는 패리티 비트입니다. 위의 프로그램에서는 ASCII 값에서 특정 키를 추가하고 빼기만 하면 지정된 문자열을 암호화하고 해독하기 위한 간단한 논리를 사용했습니다. 암호화 함수는 edflag가 0인 경우 블록을 암호화하고, 그렇지 않으면 setkey에서 이전에 설정한 키를 사용하여 블록을 해독합니다. 결과는 블록에 배치됩니다. 예를 들어 라운드 번호 1, 2, 9 또는 16이 다른 라운드의 위치에 대해서만 시프트가 수행되는 경우 원형 시프트는 두 개의 위치에 의해 수행됩니다.