해싱 및 암호화? 해시 값이란 무엇이며, 해시 암호화란 무엇이며, 해시 암호 해독이란 무엇입니까?

해시와 암호화

해시와 암호화가 같은 것이라는 일반적인 오해가 있습니다. 그들은 그렇지 않다. 해시는 돌이킬 수 없다. 예를 들어

$ echo -n Password123 | md5sum
42f749ade7f9e195bf475f37a44cafcb -

문자열 "Password123"을 MD5 알고리즘(algo)에 전달합니다. 이 알고리즘은 수학적 연산을 수행하고 생성된 16진수 인코딩 해시를 반환합니다. 동일한 해시 출력 값을 얻을 수 있는 유일한 방법은 algo를 원래 입력하는 것입니다. 충돌이 있지만 나중에 이야기할 수 있습니다.

대부분의 해시 알고리즘은 16진수 인코딩된 고정 길이의 이진 문자열을 출력합니다. 이 예와 같은 다른 사람들은 base64로 인코딩된 문자열을 출력으로 사용합니다. 길이는 항상 동일합니다.

{SHA} uNF8eZRJ8jmr8WTjyocRJPVpe7w=
{SHA}lqdu/Zr6o2dgIER8Up1/7lcUtgw=
{SHA}qYUOwLMlDEuukA5HCT4LR1kQzco=
{SHA}MXZBCpyWJ7TTs1w2kgGJslwNwTg=
{SHA}2sAPLaUh9Mz0bI+XxKEg7qyABe8=

TL; Dr.

암호화는 가역적이고 해시는


암호화에 대해 너무 말하고 싶지 않지만 (그런 것들은 책을 위한 것이기 때문에) 해시 문자열과 암호화된 문자열을 구분할 수 있어야 합니다. 암호화는 일반적으로 암호화가 발생하기 전에 특정 길이를 만족하는 문자열을 채워줍니다. 또한 암호를 해독하려면 키(또는 암호)가 필요합니다. 암호화된 암호를 사용하는 경우 입력한 길이에 따라 문자열이 달라집니다. 의 길이가 다양한 암호문 암호가 많이 표시되면 해시가 아닌 암호화를 처리하고 있을 수 있습니다. AES-256-CBC 예제 암호화된 문자열 및 연관된 일반 텍스트(키 "ASDF"):

foobar             | U2FsdGVkX19G+KtytNHdj6yH2AVvX26pEmtunS/PRnU= 
foobarfoobar       | U2FsdGVkX18sPpIvN6nVh68lOUCcb3gR2fKbCCnBxog= 
foobarfoobarfoobar | U2FsdGVkX1/EOnUt57TCW4Rh0EdNnWX+lDatuQv2xEXXeAeowW0XG/EXJUe9aSUz 

$ cat 암호화_비밀번호 
U2FsdGVkX19G+KtytNHdj6yH2AVvX26pEmtunS/PRnU= 
U2FsdGVkX18sPpIvN6nVh68lOUCcb3gR2fKbCCnBxog= 
U2FsdGVkX1/EOnUt57TCW4Rh0EdNnWX lDatuQv2xEXXeAeowW0XG/EXJUe9aSUz 

$ for i in `cat encrypted_passwords`;  do echo $i | openssl enc -base64 -d -aes-256-cbc -pass pass:asdf;  에코;  완료 
푸 바 
foobarfoobar 
foobarfoobarfoobar 

이제 여러분은 생각할 수 있습니다: 여러분이 옳을 수도 있습니다. 그러나 주요 자료는 시스템에 액세스할 수 있어야 합니다. 이는 본질적으로 일반 텍스트 마스터 암호가 어딘가에 있다는 것을 의미합니다. RSA 키 또는 암호 또는 파일, 데이터베이스에 포함, 응용 프로그램에서 하드 코딩 또는 메모리 어딘가에 있는 암호입니다. pfft, 아무도' 사용자' 비밀번호

를 암호화하는 키로 asdf를 사용하지 않을 것입니다. MD5와 동일한 문자열 사용:

foobar             | 3858f62230ac3c915f300c664312c63f 
foobarfoobar       | 59faa421729e846dd800dce59943bfc0 
foobarfoobarfoobar | 1352aadab322d1a033c27964be0965db

해시 암호는 완벽하지 않으며 사실 조금 나쁘지만 암호화보다 더 나쁘다. 왜냐하면 그것은 무엇을 달성하려고 하기 때문입니다. 사용자는 절대 최소 요구 사항을 not보다 더 자주 선택하고 여러 사이트에서 사용할 수 있습니다. 많은 '해킹'은 실제로 자격 증명 재사용 공격에 불과합니다. 만약 초기 타협이 암호화를 사용하는 것이라면, 공격자가 해야 할 유일한 노력은 모든 암호를 해독하는 키를 찾는 것입니다. 해시의 경우, 그들은 적어도 그것들을 해독하기 위해 노력해야합니다. sha512crypt, bcrypt, scrypt 또는 argon2와 같은 최신 알고리즘과 함께 사용할 때 해시 값을 해킹하는 데 많은 노력이 필요할 수 있습니다.



salt

해시하기 전에 암호에 문자열을 추가하는 것입니다. 각 해시의 소금은 고유해야 하며 일반적으로 무작위로 선택됩니다. 왜냐하면 동일한 일반 텍스트 "password" 해시 값을 매번 다른 값으로 만드는 데 중점이 있기 때문입니다. 이것은 비밀번호 해독자의 삶을 어렵게 만듭니다. 왜냐하면 1,000명의 사용자 중 각 사용자의 "비밀번호"라는 단어를 확인하려면 각 사용자는 고유한 소금을 가지고 있으며 사용자당 1,000번 - 소금당 한 번 작업해야 하기 때문입니다. 또한 사용자 정의 소금 당 사용자가 필요하기 때문에 미리 컴파일된 사전 또는 rainbow 테이블 (일반적으로 ...)을 효과적으로 사용할 수 없다는 것을 의미합니다.

사이트는 때때로 이것을 망치고 모든 사용자를 위한 일반적인 소금을 사용합니다; 이것은 목적에 어긋난다.

다음은 소금 SHA1 해시입니다.


b353977827f67a4ae0318f3a9447fae1c13d9d90:b8d18ca 
|___________________________________________| 
                  해시                  |  소금 
                                        | 
                                    separator

이 해시의 일반 텍스트는 "password"입니다. 소금 값은 "b8d18ca"이며 SHA1($salt.$pass)의 API를 사용합니다. 이는 알고리즘이 암호의 일반 텍스트를 가져와 salt를 생성하고 일반 텍스트 앞에 추가한다는 것을 의미합니다. 웹 사이트 또는 응용 프로그램이 비밀번호를 확인하려고 할 때 앞으로 일반 텍스트 비밀번호를 입력으로 사용하고 저장된 해시에서 salt 값을 읽고 선택한 비밀번호 앞에 추가하고 생성된 해시 값을 저장된 해시 값과 비교합니다. 크래킹 그 일부가 소금이라는 것을 알지 못하면 해시는 다음과 같은 일반 텍스트를 생성합니다.

b8d18capassword

알고리즘이 일반 텍스트를 입력하기 때문에 salt와 생성된 해시는 사용자에게 투명하게 유지될 수 있습니다. 분해 시 알고리즘이 소금이라면 소금을 알아야 후보 일반 텍스트를 생성할 때 제공할 수 있습니다.

제대로 구현하면 소금에 의해 균열이 더 많은 시간이 걸릴 수 있습니다. 무작위 소금을 사용하면 Cracker가 일치하지 않는 소금 해시 값을 해독하려고 시간을 낭비하도록 강요합니다. 이것은 대략 device_speed / number_of_salts에 필요한 노력을 완료합니다. 각 소금에 대한 후보를 생성해야 하기 때문입니다. 소금이 정적이라면 수학적 연산은 동일합니다... speed_of_device / 1. 다른 보기 방법 이것은:

Our GTX 980 cracks SHA1($salt.$pass) at 3576.8 MH/s or 3.5 billion candidates per second 
우리의  해시리스트 에는  1000 고유 소금이 포함되어 있습니다. 

3,500,000,000 / 1000 = 3,500,000 candidates per second

이는 99.9%의 손실로 세 배 느리다. 정적 소금을 사용하면 다음과 같습니다.

Our GTX 980 cracks SHA1($salt.$pass) at 3576.8 MH/s  또는  3.5 billion candidates per second 
우리의  해시리스트 에는  1 고유 소금이 포함되어 있습니다. 
               
3,500,000,000 / 1 = 3,500,000,000 candidates per second

이것이 의미가 없다면 계속 읽어보세요. 나중에 아름다운 차트가 있을 것입니다...


반복

단순히 "이 일반 텍스트를 해시"하는 것과 비교하여 또 다른 일반적인 개선 사항은 "이 일반 텍스트를 해시하고 그 결과를 해시하고 그 결과를 해시"하는 것이 수천 번 반복된다는 것입니다. 이렇게 하면 암호 해독 프로그램은 단일 후보 암호를 시도할 때 수천 번 수행해야 합니다. 이를 반복, 순환 또는 가변 비용이라고 합니다. 일부 암호 해시 알고리즘은 하드코딩된 반복 라운드를 사용합니다. 기타 Git. 해시 자체의 일부로 구성 가능하게 만듭니다. 예를 들어, md5crypt()는 salt를 포함한 MD5를 사용하고 정확히 1000회 루프합니다. sha512crypt()는 sha512를 사용하고 구성 가능한 횟수(기본값은 5,000)를 포함합니다.

반복은 주로 해시 알고리즘의 컴퓨팅 사이클 비용에 영향을 미치지만, 메모리 사용량이나 기타 요인이 아니다. 이러한 공격은 특정 유형의 해시 유형에 저항하도록 최적화된 디자인에서도 중요하지만 여기서 논의하기에는 너무 잡초입니다.


해시 유형이 크랙 속도에 미치는 영향

해시 알고리즘 선택의 영향을 보여주는 몇 가지 예를 살펴보겠습니다. salted, 다중 반복 사용 등입니다. 공격자가 감염된 웹사이트에서 1,000명의 사용자의 해시 값을 수집했다고 가정해 보겠습니다. 각 비밀번호를 테스트하는 간단한 공격을 수행하려고 합니다. 해시 값 - 1억 4,300만 후보 비밀번호.

감염된 웹 사이트가 사용하는 해시 유형은 공격자가 이 공격을 통과하는 데 걸리는 시간에 큰 영향을 미칩니다. 이것은 (상대적으로, 대략적으로) 얼마나 많은지 보여주는 차트입니다. 사용되는 해시 유형에 따라 공격을 완료하는 데 몇 초가 걸립니다. 표준 그래픽 카드:

글쎄요, 그건 소용이 없어요! 가장 강한 해시 유형은 훨씬 느리지만 더 빠릅니다. 유형은 아무것도 없을 때까지 압축됩니다. 로그 X축 시간을 사용하여 같은 데이터 크기를 다시 시도해 보겠습니다. 막대가 왼쪽에서 오른쪽으로 이동할 때 10의 제곱으로 증가합니다.

그래서 몇 가지 요점은 다음과 같습니다. 암호 해시를 해독하려면 단일 라운드가 여러 라운드보다 쉽고 소금이 없는 것이 소금을 추가하는 것보다 쉽습니다. 반대로, 특정 회사 또는 웹사이트가 사용자 데이터를 포함하는 데이터 유출을 발표할 때, a) 비밀번호는 일반 텍스트뿐만 아니라 해시된 것이 좋습니다. b) 그들은 단지 해시가 아닌 소금을 더 좋게; c) 그들은 더 좋습니다 항상 단일 라운드가 아닌 강력한 다중 라운드 소금 해시를 사용합니다.



해시 유형 인식

주어진 암호 해시를 해독하려고 시도하기 전에 해시 알고리즘을 구현하기 위해 어떤 해시 알고리즘을 사용했는지 파악하는 것은 해독자에게 달려 있습니다. 해시 유형을 식별하는 것은 일반적으로 간단하지만 항상 그런 것은 아닙니다. 크래커는 일반적으로 해시 길이와 형식과 같은 단서를 기반으로 근거가 있는 추측을 합니다. 결국 해시 타입 추측이 맞는지 확신할 수 있는 유일한 방법은 해시가 크랙되었는지 여부입니다.

이 작업을 위한 몇 가지 훌륭한 리소스는 여기와 여기에 제공되며, 모두 일반적인 해시 값이 어떤 것인지 보여줍니다.

알려지지 않은 해시 유형을 식별하는 데 도움이 되는 "hash-identifier" 패키지(여기에서 사용 가능)가 칼리 리눅스에서 제공됩니다.



충돌

두 개의 서로 다른 입력이 동일한 해시 출력을 가져올 때 충돌이 발생합니다. 이것은 (분명히) 나쁘다. 암호의 경우 실제 암호를 해독하지 않았을 수도 있지만 동일한 해시 값을 생성하는 입력을 찾았기 때문에 일반 텍스트 값을 사용하여 암호가 합법적이라고 생각하는 시스템을 속일 수 있습니다.

Microsoft Office는 수년 동안 문서 보호에 충돌이 발생하기 쉬운 알고리즘을 사용했습니다. 단일 해시에 대한 여러 가지 충돌을 발견하는 것은 드문 일이 아니며, 이 모든 충돌은 문서의 잠금을 해제합니다. 일단 충돌이 발견되면 알고리즘은 실제로 파괴됩니다. 한 번 일어나면 통계적으로 다시 일어날 가능성이 높다. 우리를 방해하는 유일한 것은 시간과 처리 능력입니다. 알고리즘이 더욱 견고해짐에 따라 후보 알고리즘을 생성하고 해시 출력을 비교하여 검색하는 데 더 많은 능력과 시간이 필요합니다. 따라서 디자이너들은 충돌에 취약하지 않은 알고리즘을 만드는 데 점점 더 능숙해지고 있습니다.


이전:해시 고양이 암호 크래킹 하드웨어
다음:Hashcat이란 무엇입니까? 암호 크래킹의 첫 번째 단계 [초보자 가이드]
  • Word/Excel/Pdf/PPT/RAR/zip/7z在线密码破解
  • offfice、PDF、压缩文件、WPS、在线密码恢复
  • hashcatonline.com在线密码破解版权所有2010-2025