네트워크와 시스템은 비밀번호와 기타 로그인 정보를 어떻게 저장합니까?

몇 년 전만 해도 대문자와 소문자, 기호, 숫자로 구성된 8자리 무작위 비밀번호는 해독하기가 매우 어려웠습니다. 어떤 경우에는 그런 비밀번호를 해독하는 데 몇 년이 걸리기도 했습니다.

오늘날 변화하는 기술과 대여 기기 덕분에 이 시간은 몇 시간으로 단축되었습니다. 하지만 이 비밀번호들은 애초에 어떻게 저장될까요? 확인해 보세요. 비밀번호는 과거의 유물입니다. 올해 단계적으로 폐지되는 이유.

비밀번호는 온라인에 어떻게 저장되나요?

시스템은 사용자 비밀번호를 파일이나 데이터베이스에 직접 저장하지 않습니다. 공격자가 시스템에 비밀번호가 저장된 데이터베이스를 제어할 수 있기 때문입니다. 대신, 시스템은 사용자 정보를 암호화하여 공격자에게 각 비밀번호의 암호화된 사본을 제공합니다.

시스템은 비밀번호를 암호화하는 데 몇 가지 고급 알고리즘을 사용합니다. 이러한 알고리즘 중 하나는 대칭 암호화입니다. 대칭 암호화는 암호화와 복호화에 동일한 키를 사용하는 암호화 유형입니다. 대칭 암호화 알고리즘은 복호화에 하나의 키만 사용하므로 보안에 다소 위험이 따릅니다. 이러한 이유로 시스템은 일반적으로 대칭 암호화 알고리즘을 사용하지 않습니다.

일반적으로 시스템에서 암호화에 사용하는 방법은 해싱 알고리즘입니다. 해싱 알고리즘은 데이터의 무결성과 표현을 검증하도록 설계되었으며, 암호화를 목적으로 하지 않습니다. 해싱 알고리즘은 데이터를 고정된 크기의 해시값으로 변환하며, 일반적으로 데이터의 고유한 조각을 나타냅니다. 해시 함수는 무작위로 생성된 데이터 청크의 고정 길이 맵을 생성해야 합니다.

해싱 알고리즘 덕분에 공격자가 비밀번호가 저장된 데이터베이스를 장악하더라도, 그 이후부터는 비밀번호에 접근할 수 없습니다. 여기서 매우 중요한 차이점이 있습니다. 이론적으로 모든 비밀번호 조합에 동일한 해싱 알고리즘을 사용하는 시스템을 침해한 공격자는 결과를 비교할 수 있습니다. 만약 공격자가 이러한 비교 결과와 동일한 값을 얻는다면, 공격자는 비밀번호의 공개 버전을 발견한 것입니다. 이 방법은 시행착오에 의존하며, 이러한 유형의 공격을 일반적으로 무차별 대입 공격(brute force attack)이라고 합니다.

8년대 초에는 일반적인 해싱 알고리즘을 사용하여 암호화된 123456자리 비밀번호 조합을 모두 시도하는 데 수백 년이 걸렸을 것입니다. 물론 "XNUMX"이나 "mypassword"와 같은 매우 간단한 조합조차도 이 세트에 포함되지 않습니다. 오늘날 소프트웨어와 하드웨어 기술의 발전으로 비밀번호 해독 방식도 크게 바뀌었습니다. 확인해 보세요. 비밀번호 관리 앱의 보안을 신뢰할 수 있나요?

그래픽 카드의 등장이 가져온 영향

그래픽 프로세서(GPU)의 병렬 처리 성능은 시간이 지남에 따라 향상되었습니다. 그래픽 카드는 범용 CPU처럼 멀티태스킹을 수행할 수 없습니다. 따라서 많은 코어와 병렬 처리 능력에도 불구하고 프로세서처럼 거의 모든 작업에 사용하는 것은 의미가 없습니다.

하지만 비밀번호에 사용되는 해싱 알고리즘 중 일부는 GPU에서 매우 효율적으로 구현될 수 있습니다. 기존 CPU를 사용하여 달성할 수 있는 초당 해시 수는 새로운 그래픽 카드의 등장으로 크게 증가했습니다.

대략적인 이해를 위해 아래 표에서 NTLM, MD5, SHA1과 같은 해싱 알고리즘의 초당 해시 수(해시 레이트는 컴퓨터가 해시 계산을 수행할 수 있는 속도를 나타냄)를 살펴보세요. 지금은 이것들이 해싱 알고리즘일 뿐이라는 것을 아는 것으로 충분합니다. 이 표를 만들기 위해 저는 25개의 AMD Radeon GPU로 구성된 클러스터를 사용했습니다.

연산초당 조각 수
NTLM350.000.000.000
MD5180.000.000.000
SHA163.000.000.000
SHA512암호화364.000
비크립트71.000
스크립33.000

보시다시피, 이러한 시스템을 사용하면 초당 350억 번의 NTLM 해시를 생성할 수 있습니다. 즉, 8시간 이내에 모든 6자리 비밀번호 조합을 시도해 볼 수 있다는 뜻입니다. 게다가 이 예시에 사용된 하드웨어는 수년 전의 것입니다. 오늘날 비밀번호 해독의 위력을 상상해 보세요.

소프트웨어 개발자는 무엇을 해야 할까?

프로그래머가 취해야 할 접근 방식은 매우 간단합니다. 비밀번호를 암호화할 때 해시 값을 계산하는 데 시간이 더 오래 걸리는 알고리즘을 선호해야 합니다. 개발자는 사용하는 알고리즘이 CPU에서 얼마나 잘 작동하는지뿐만 아니라 그래픽 카드 환경에서도 얼마나 안정적인지 알아야 합니다.

개발자가 Django, Ruby on Rails, Spring Security와 같이 비밀번호 암호화를 처리하는 프레임워크를 사용하는 경우, 보안 측면에서 프레임워크 내에서 올바른 결정이 내려졌는지 확인해야 합니다.

예를 들어, 다음을 사용합니다. 통화 Ruby on Rails에서 사용자 작업에 가장 널리 사용되는 라이브러리 중 하나인 Bcrypt는 기본 해싱 알고리즘으로 사용됩니다. 또한 다른 해싱 알고리즘을 사용할 수도 있습니다. Bcrypt 알고리즘은 그래픽 카드가 정확한 지점에 도달하는 데 시간이 오래 걸리기 때문에 안정적입니다.

간단히 말해, 해시 값을 계산하는 데 걸리는 시간이 길어질수록 보안성은 높아집니다.

비밀번호는 몇 글자로 구성되어야 합니까?

비밀번호를 해독하고 보안을 강화하는 데 필요한 시행착오의 수는 사용하는 문자 하나마다 기하급수적으로 늘어납니다.

이 상황을 두 가지 다른 시나리오에서 생각해 보겠습니다. 위 표에서 NTLM 해시 알고리즘의 값을 살펴보고, 비밀번호를 해독하려고 한다고 가정해 보겠습니다. 8자 이상의 비밀번호를 대상으로 공격하는 경우를 생각해 보겠습니다.

문자 수대문자/소문자 및 숫자대문자/소문자, 숫자 및 특수 기호
81분도 안 돼XNUMX분
9XNUMX분두 시간
10두 시간일주일
116일센틴
12신의 와하드200화
13100세기 이상1000세기 이상

표를 살펴보면 대문자/소문자 조합, 숫자, 특수 문자를 모두 사용할 경우 최소 12자 이상의 비밀번호가 안전하다는 것을 알 수 있습니다. 특수 문자를 사용하지 않으면 안전한 비밀번호 길이를 확보하려면 13자가 필요합니다. 이 시스템에서 NTLM 해싱 대신 Bcrypt 해시 방식을 사용하면 8자면 충분합니다. 하지만 웹에서 접속하는 시스템의 해시 방식과 비밀번호를 저장하는 시스템을 알 수 있는 기회는 없습니다. 따라서 모든 가능성을 고려해야 합니다.

소프트웨어 개발자들의 가장 큰 문제는 사용자에게 최소 12자 이상의 비밀번호를 사용하도록 설득하는 것이 거의 불가능하다는 것입니다. 현재 이 길이의 비밀번호 사용률은 매우 낮습니다. 따라서 개발된 시스템의 사용 시나리오에 따라 사용자가 수용할 수 있는 절충안을 찾아 비밀번호 보안을 강화해야 합니다.

개발자를 위한 마지막 제안은 사용자에게 제공하는 양식을 통해 수신되는 입력의 최소 길이뿐만 아니라 최대 길이도 확인하는 것입니다. 특히 보안을 위해 Bcrypt와 같은 느린 계산 속도의 해싱 알고리즘을 사용하도록 설정한 경우, 사용자가 입력하는 비밀번호의 최대 길이를 제어하지 않으면 위험에 직면할 수 있습니다. 예를 들어, 공격자는 특수하게 조작된 요청을 사용하여 100만 자 길이의 비밀번호를 수십 개 동시에 시도하여 공격을 실행할 수 있습니다. 이러한 상황에서는 시스템이 다른 사용자에게 응답하지 않을 가능성이 매우 높습니다. 비밀번호가 온라인에서 판매되고 있는지 확인하는 방법.

최종 사용자 조언

비밀번호는 최소 12자 이상으로 대문자, 소문자, 숫자, 특수 문자를 포함하세요. 비밀번호를 저장하는 시스템은 해킹당할 수 있으며, 사용자의 정보가 악용될 수 있다는 점을 잊지 마세요. 시스템이 비밀번호를 암호화하는 데 사용하는 알고리즘을 알 수 없으므로, 예방 조치를 취하고 강력한 비밀번호를 만드는 것은 전적으로 사용자의 책임입니다. 지금 바로 확인해 보세요. 해독하기 어려운 강력한 비밀번호를 온라인에서 생성하는 방법.

맨 위로 이동 버튼