2009-07-21 6 views
7

이것이 가능한지 확실하지 않지만 문자열로 시작한 다음이 문자열을 가져 오려면 입력이 crypt에 있어야하는 것을 알아낼 수 있어야합니다.c에서 crypt()를 뒤집을 방법이 있습니까?

어쩌면 불가능할 것입니다. 어쨌든 그 모든 것이 목적일까요?

예, 코드에서 제가 이것을 시도하고있는 소금이 있습니다.

+0

예 암호 균열이라고합니다. http://en.wikipedia.org/wiki/Password_cracking – newacct

답변

13

디자인 의도에 따라 crypt()은 단방향 해시입니다. 모든 사람들이 말했듯이, 그것은 동일한 해시를 생성하는 일반 텍스트 문자열을 발견하는 것이 계산 상으로 불가능하다는 것을 의미합니다.

두 가지 요인이 디자인 의도에 영향을 미칩니다.

  1. 계산은 crypt() 설계 할 때 그것이보다 많은 저렴합니다. 더 나쁜 것은 계산이 더 저렴 해 졌다고 예상하지 못했기 때문에 이제는 예상했던 것보다 훨씬 저렴합니다.

  2. DES는 그렇게 생각한만큼 방해하지 않았습니다. 그러나 당시 대중의 지식 상태를 고려할 때 아마도 최선의 선택이었을 것입니다.

  3. 계산이 아직 자신의 크랙을 수행 할만큼 충분히 싸지 않더라도 인터넷 인 클라우드는 이미 많은 작업을 수행했습니다. 사람들은 특정 해시를 역전시키는 데 필요한 많은 계산을 바로 가기 할 수있게 해주는 Rainbow Tables을 컴퓨팅하고 게시했습니다. (Jeff had a blog post on rainbow tables too.) 소금은 레인보우 테이블을 보호하는 데 도움이됩니다 (소금의 가능한 각 값에 대해 테이블을 설정해야하기 때문에). crypt()의 클래식 구현에 사용 된 소금의 크기는 단지 12 비트이므로 거대한 블록이있을 수 있습니다.

해시의 거의 완전한 사전과 그 역수 (이전 마이크로 소프트 LAN 관리자 암호를 발명하지만, 비스타 전에 윈도우의 모든 버전에서 짧은 암호를 사용 LM hash 같은) 존재하는 특정 높은 값 해시 기능, 설상가상으로 .

-1

아니요 .. 단방향 기능입니다.

1

토굴()는 암호화 된 값에 염을 첨가하여 무력 더 어렵게된다 가역 알고리즘 (는 일방향 함수를 사용하여)이 아니다.

댓글 당 편집 됨.

+3

소금은 돌이킬 수없는 것이 아닙니다. "소금"은 범위의 하위 집합에 대한 역함수를 찾기 위해 철저한 테이블 검색을 통해 별도의 알고리즘을 사용하는 것을 더 어렵게 만듭니다. –

2

아니요, 일방향 해시 함수의 기본 개념이지만 어떤 경우에는 google을 사용하여 도움을받을 수 있습니다.

이 답변에 대한 의견에 답변하려면 (Google에서 소금이 있으면 도움이되지 않습니다) 저는 다음과 같이 말합니다 : 예, 아니오. 소금은 솔루션의 공간을 늘려 전체 사전을 쉽게 작성하지 못하게합니다. 각 단어에 대해 가능한 한 두 자리의 소금에 대해 하나의 암호 버전을 계산하고 저장해야하기 때문입니다. 인터넷이 거대한 데이터베이스라고 가정하고 Google의 색인 인 경우 Google에서 수행하는 작업은 웹에서 암호화 된 문자열의 어딘가가 있는지 검색하는 것입니다. 소금의 존재는 당신이 그것을 발견 할 기회를 줄이지 만, 당신이 운이 좋으면 그 사건이 존재하고, 또한 평문과 함께 있다면, 당신은 암호를 가지고 있습니다.

도 참조하십시오. this article on slashdot.

결론 : 소금은 웹에서 특정 암호화 된 문자열을 발견 할 기회를 줄이며 사실 Google은 소금의 양에 무관심하며 운이 좋다면 어떻게 든 도움이됩니다. 내가 준 경우).

+1

소금이 있으면 Google에서 도움을주지 않습니다. – Brian

0

아니,이 사이트를 살펴 불가능 http://www.gnu.org/s/libc/manual/html_node/crypt.html

지하실이 소금에 절인되는 방법 (당신이 GNU C 라이브러리를 사용하는 가정) 것입니다 당신이 'ISN을하려고하는지 꽤 많이 보장 일하러 갈거야.

+3

소금은 해독 가능한 알고리즘과 아무 관련이 없습니다. 소금은 레인보우 테이블 조회 공격으로부터 보호합니다. –

0

일방적 인 기능은 세계의 모든 암호 체계의 백본입니다. 여기에있는 누군가가 "예, 여기에 .."라고 대답한다면, 정부는 즉시 자신의 의견을 삭제하고, 집을 태워 버리고, 알려지지 않은 위치로 쫓아 낼 것입니다.

간단히 말해서, 아니요.

+1

아니요, 그들은 매일 랩톱 컴퓨터의 기밀 데이터를 잃어 버렸습니다. 구식의 단방향 해시를 해독하면 정말로 관심이 있다고 생각합니까? ;) 물론, 최신 브리트니 스피어스 DRM을 크랙하는 경우 guantanamo에 휴가를위한 수하물을 준비하십시오. –

+0

crypt()는 md5 또는 des 기반 알고리즘을 기반으로합니다 (http://www.gnu.org 참조). /s/libc/manual/html_node/crypt.html). Md5는 충분히 효과적이지 못하다는 것은 잘 알려져 있으며 des와 마찬가지로 오래된 des 알고리즘도 비효율적이며 많은 새로운 버전이 있습니다. 어떤 정부도 해싱을위한 백본으로이 구현을 정확하게 사용할 것이라고는 생각하지 않습니다 (특히, DES를 담당하는 NSA가 SHA 기반 알고리즘을 대체품으로 생성합니다. –

+2

두 가지 모두 : Md5는 알고리즘에 문제가 있기 때문에 bute-force 공격에서 생존하기에 충분한 비트를 사용하지 않기 때문에 "구식"으로 간주됩니다. 알고리즘을 뒤집는 방법을 알아 내면 동일한 수학적 방법을 사용하는 * 크립트 (비트 크기에 관계없이)를 크랙 할 수 있습니다. 전 세계 암호 및 암호화 된 통신이 공개 될 수 있습니다. –

4

crypt(3)의 이전 구현 인 경우 DES를 사용하면 거의 무방합니다.

이 구성에서 입력은 8 자로 잘리고 각 문자는 7 비트로 잘립니다. 즉, 56 비트의 검색 할 별도의 암호 공간이 있음을 의미합니다.

DES만으로도 $ 10K 상당의 FPGA (http://en.wikipedia.org/wiki/Data_Encryption_Standard#Brute_force_attack)에서 약 18 일 동안 전체 공간을 검색 할 수 있으므로 예상 시간은 9 일입니다. 그러나 나는 당신이 문제에 소비하는 데 1 만 달러가 없다고 가정하고 있습니다. 몇 년 더 지내면 DES 크래커가 PC의 GPU에서 그럴듯한 시간에 돌아갈 지 알 수 있습니다.

심지어 에도 소금을 기반으로 한 알고리즘을 약간 수정하여 25 라운드의 DES가 포함되어 있기 때문에 무차별 공격보다 25 배 이상 느릴 것으로 예상됩니다.

crypt(3)의 새로운 구현은 이전의 crypt(3)이 사용한 DES 기반의 해시 알고리즘보다 더 나은 해시 알고리즘을 기반으로하기 때문에 무차별 한 방법입니다.

물론 문자열이 임의적이지 않은 경우 (예 : 사람이 선택한 암호 인 경우) 무차별 공격보다 예상 시간이 훨씬 길어질 수 있습니다.

+0

Btw, 그냥 장난감 테스트를 실행하고 내 "가장 간단한"암호 해독기 내 노트북의 핵심을 사용하여 핵심 공간을 커버하는 데 약 30 만년이 걸릴 것입니다. gcc의'-lcrypt'는 8char x 7bit 버전의 암호를 제공합니다. 그래서 그것은 저에게 훼방 할 수 없지만, 누군가에 의해 훼손되지 않는다고 가정하는 것은 안전하지 않습니다. –

관련 문제