Password 감사
문제
독일어 원문
Wie beurteilen Sie die Wahl der Passwörter der Benutzer in der Tabelle? Begründen Sie kurz.
한국어 해석
표에 있는 사용자 password 선택을 평가하고 근거를 쓰시오.
실제 시험에 제시된 Login 코드·사용자 표
index.html
1 <form action="http://api.example.com/login.php" method="GET">
2 Username: <input type="text" id="user" name="user">
3 Password: <input type="password" id="pw" name="pw">
4 <input type="submit" value="Login">
5 </form>
users
| login | password | role | |
|---|---|---|---|
| admin | king2026 | administrator | bob.king@example.com |
| alice | wonderland2002 | user | alice303@gmail.com |
| bob | king2026 | user | bob.king@gmail.com |
| charlie | 123456 | guest | ch.ar.lie.xxx@gmail.com |
| eve | 34@s5wa-rPg5.5 | readonly | eve.online.1997@gmail.com |
login.php
2 $user = $_GET['user'];
3 $pass = $_GET['pw'];
4 $sql = "SELECT * FROM users WHERE login = '$user' AND password = '$pass'";
5 $result = $conn->query($sql);
6 if ($result->num_rows > 0) {
7 echo "<div>Erfolgreich angemeldet!</div>";
8 } else {
9 echo "<div>Fehlgeschlagener Login für Nutzer: " . $user . "</div>";
10 }
출처: 실제 시험지 p13–14. 각 소문제에서 같은 code/data flow를 다시 추적합니다.
Password 비교 실습
비밀번호를 눌러 공격자 관점의 이유를 확인하세요.
단계별 힌트
막혔을 때만 한 단계씩 여세요. 정답을 바로 읽는 것보다 기억을 꺼내는 시간이 중요합니다.
- 첫 힌트: 복잡한 기호 하나보다 길이와 고유성이 중요하다. 같은 열쇠를 여러 문에 쓰면 한 곳의 유출이 모든 문을 연다.
- charlie의 약한 password를 지적한다.
- admin/bob의 재사용을 지적한다.
- alice의 예측 가능한 패턴을 지적한다.
- Eve가 상대적으로 강함을 말한다.
- 함정: 문자 종류만 세고 reuse를 놓치지 않는다.
- 후속 점검: 길고 고유한 passphrase가 짧고 복잡해 보이는 문자열보다 나을 수 있는 이유는?
채점 기준으로 내 답안 점검하기
- charlie의 약한 password를 지적한다.
- admin/bob의 재사용을 지적한다.
- alice의 예측 가능한 패턴을 지적한다.
- Eve가 상대적으로 강함을 말한다.
답안 슬롯 자가 점검 — 실제로 말하거나 쓴 항목만 체크하세요.
0/4 slots
정답과 핵심 해설 확인하기
`123456`은 매우 약하고, `king2026`은 예측 가능하며 admin과 bob이 재사용한다. `wonderland2002`도 사전 단어+연도 패턴이다. Eve의 `34@s5wa-rPg5.5`가 상대적으로 강하다. 긴 고유 passphrase와 password manager가 바람직하다.
- charlie의 약한 password를 지적한다.
- admin/bob의 재사용을 지적한다.
- alice의 예측 가능한 패턴을 지적한다.
- Eve가 상대적으로 강함을 말한다.
개념부터 다시 보는 상세 풀이
BEGINNER LESSON
웹 보안: 이 문제를 처음부터 이해하기
ZERO-BASE START
정말 아무것도 모른다고 가정하고 시작합니다
전문 용어를 알고 있다고 가정하지 않습니다. 먼저 일상적인 장면을 보고, 그 장면의 사람과 행동에 실제 보안 용어를 하나씩 붙인 뒤, 시스템에서 일어나는 순서를 따라갑니다.
기초 개념 01
강한 password를 공격자 관점에서 평가하기
1타 강사식 시작: 이름은 잠시 가리고 장면부터 봅시다
자물쇠 번호가 길어도 1234567890이면 공격자는 첫 시도에 가깝게 맞힌다. 짧은 장식보다 선택의 예측 불가능성이 중요하다.
지금은 이 비유를 완벽히 외울 필요가 없습니다. 누가 무엇을 가지고 있고, 무엇을 하려 하며, 어느 지점에서 문제가 생기는지만 찾으면 됩니다.
이제 실제 용어를 하나씩 붙여 봅시다
Password strength는 사람이 보기에 복잡한지가 아니라 공격자가 몇 번의 추측으로 맞힐 가능성이 높은지로 평가한다. 12345 같은 순서, 사전 단어, 이름과 연도 조합, 여러 사이트에서 재사용한 password는 먼저 시도된다. 길고 예측하기 어려운 고유 passphrase나 password manager가 만든 무작위 password가 유리하다.
TERMS FROM ZERO
전문 용어를 한 단어씩 풀기
아래 단어는 이미 안다고 가정하지 않습니다. 먼저 쉬운 뜻을 읽고, 본문에서 같은 단어가 나오면 이 정의로 다시 바꾸어 읽으세요.
Password entropy
공격자 관점에서 password가 얼마나 예측 불가능한지를 나타내는 정도입니다.
Dictionary attack
흔한 단어와 알려진 변형 규칙을 우선 시험하는 password 추측 공격입니다.
Credential stuffing
다른 site에서 유출된 username/password 조합을 재사용해 login하는 공격입니다.
MFA
Password 외에 별도의 factor를 요구해 password 하나의 유출만으로 login하기 어렵게 하는 인증 방식입니다.
프로그램이나 프로토콜 안에서는 다음 순서로 움직입니다.
- Common password list와 사전 단어 여부를 본다.
- 이름+연도, 키보드 배열, 숫자 순서 같은 pattern을 찾는다.
- 길이와 무작위성, 사이트별 고유성을 확인한다.
- 저장 방식의 KDF 강도와 사용자가 고른 password 강도를 별도로 평가한다.
왜 여기서 많이 틀릴까요?
특수문자 하나나 최신 연도를 붙였다는 이유만으로 strong이라고 단정하지 않는다.
조건을 생략하거나 서로 다른 기능을 같은 것으로 취급했는지 확인하세요. 정답 문장을 외우는 것보다 틀린 이유를 말할 수 있어야 변형 문제를 풀 수 있습니다.
기초 개념 02
Password를 저장하지 않고 검증값을 저장하는 법
1타 강사식 시작: 이름은 잠시 가리고 장면부터 봅시다
비밀번호 원본을 창고에 보관하는 대신, 입력한 열쇠가 맞는지만 검사하는 느린 시험 장치를 보관하는 것이다. Salt는 같은 열쇠라도 사용자마다 다른 시험지를 받게 한다.
지금은 이 비유를 완벽히 외울 필요가 없습니다. 누가 무엇을 가지고 있고, 무엇을 하려 하며, 어느 지점에서 문제가 생기는지만 찾으면 됩니다.
이제 실제 용어를 하나씩 붙여 봅시다
Server는 사용자의 plaintext password를 다시 읽을 필요가 없다. 가입할 때 각 사용자마다 무작위 salt를 만들고 password와 함께 느린 password KDF에 넣어 나온 hash와 salt만 저장한다. 로그인 때 입력 password로 같은 계산을 수행해 비교한다. Argon2id, bcrypt, scrypt, PBKDF2 같은 KDF는 반복 계산과 memory 사용으로 대량 추측을 비싸게 만든다.
TERMS FROM ZERO
전문 용어를 한 단어씩 풀기
아래 단어는 이미 안다고 가정하지 않습니다. 먼저 쉬운 뜻을 읽고, 본문에서 같은 단어가 나오면 이 정의로 다시 바꾸어 읽으세요.
Password hash / KDF
Password 검증을 위해 의도적으로 비용을 높여 만든 단방향 계산 결과입니다.
Salt
사용자마다 새로 만드는 공개 random 값으로 같은 password도 서로 다른 저장 결과를 만들게 합니다.
Cost parameter
Password 추측 한 번에 필요한 시간·memory 비용을 조절하는 설정입니다.
Offline guessing
공격자가 유출된 database를 자기 장비에서 server 제한 없이 시험하는 공격입니다.
프로그램이나 프로토콜 안에서는 다음 순서로 움직입니다.
- 사용자마다 고유한 random salt를 생성한다.
- Password와 salt를 느린 KDF에 넣는다.
- Salt, KDF parameter, 결과 hash를 저장한다.
- 로그인 시 검증 API로 비교하고 role authorization은 별도로 확인한다.
왜 여기서 많이 틀릴까요?
일반적인 빠른 hash 한 번만 사용하거나 모든 사용자에게 같은 salt를 쓰면 대량 추측과 미리 계산한 table 공격에 약하다.
조건을 생략하거나 서로 다른 기능을 같은 것으로 취급했는지 확인하세요. 정답 문장을 외우는 것보다 틀린 이유를 말할 수 있어야 변형 문제를 풀 수 있습니다.
핵심부터 말하면 복잡한 기호 하나보다 길이와 고유성이 중요하다. 같은 열쇠를 여러 문에 쓰면 한 곳의 유출이 모든 문을 연다.
이 글에서 익힐 것
표에 있는 사용자 password 선택을 평가하고 근거를 쓰시오.
이 문항에 연결된 2개 기초 개념과 8개 전문 용어를 자신의 말로 설명한다.
정의만 외우지 않고 구체적인 입력·message·code 흐름을 단계별로 재현한다.
시험 답안에서 결론과 근거, 조건 또는 한계를 함께 쓴다.
이 문제가 어려운 이유
문제 문장은 짧지만 초보자가 이미 안다고 가정하는 용어와 중간 단계가 숨어 있습니다. 이 페이지에서는 ‘표에 있는 사용자 password 선택을 평가하고 근거를 쓰시오.’를 바로 외우지 않고, 아래 연결 개념을 일상 장면에서 시작해 실제 시스템 순서로 바꿉니다.
문제가 묻는 것
표에 있는 사용자 password 선택을 평가하고 근거를 쓰시오.
문제가 요구하는 동사와 답의 개수를 먼저 표시하고, 등장 주체·입력·처리 순서·보안 효과·남는 한계를 차례로 적습니다.
먼저 알아야 할 개념
-
강한 password를 공격자 관점에서 평가하기
Password strength는 사람이 보기에 복잡한지가 아니라 공격자가 몇 번의 추측으로 맞힐 가능성이 높은지로 평가한다. 12345 같은 순서, 사전 단어, 이름과 연도 조합, 여러 사이트에서 재사용한 password는 먼저 시도된다. 길고 예측하기 어려운 고유 passphrase나 password manager가 만든 무작위 password가 유리하다.
자물쇠 번호가 길어도 1234567890이면 공격자는 첫 시도에 가깝게 맞힌다. 짧은 장식보다 선택의 예측 불가능성이 중요하다.
-
Password를 저장하지 않고 검증값을 저장하는 법
Server는 사용자의 plaintext password를 다시 읽을 필요가 없다. 가입할 때 각 사용자마다 무작위 salt를 만들고 password와 함께 느린 password KDF에 넣어 나온 hash와 salt만 저장한다. 로그인 때 입력 password로 같은 계산을 수행해 비교한다. Argon2id, bcrypt, scrypt, PBKDF2 같은 KDF는 반복 계산과 memory 사용으로 대량 추측을 비싸게 만든다.
비밀번호 원본을 창고에 보관하는 대신, 입력한 열쇠가 맞는지만 검사하는 느린 시험 장치를 보관하는 것이다. Salt는 같은 열쇠라도 사용자마다 다른 시험지를 받게 한다.
예제로 확인하기
-
강한 password를 공격자 관점에서 평가하기을 이 문제에 대입하기
자물쇠 번호가 길어도 1234567890이면 공격자는 첫 시도에 가깝게 맞힌다. 짧은 장식보다 선택의 예측 불가능성이 중요하다.
Common password list와 사전 단어 여부를 본다.
이름+연도, 키보드 배열, 숫자 순서 같은 pattern을 찾는다.
길이와 무작위성, 사이트별 고유성을 확인한다.
저장 방식의 KDF 강도와 사용자가 고른 password 강도를 별도로 평가한다.
위 순서를 문제 문장 ‘표에 있는 사용자 password 선택을 평가하고 근거를 쓰시오.’에 적용하면, 이 문항의 핵심 결론은 `123456`은 매우 약하고, `king2026`은 예측 가능하며 admin과 bob이 재사용한다. `wonderland2002`도 사전 단어+연도 패턴이다. Eve의 `34@s5wa-rPg5.5`가 상대적으로 강하다. 긴 고유 passphrase와 password manager가 바람직하다.입니다.
-
Password를 저장하지 않고 검증값을 저장하는 법을 이 문제에 대입하기
비밀번호 원본을 창고에 보관하는 대신, 입력한 열쇠가 맞는지만 검사하는 느린 시험 장치를 보관하는 것이다. Salt는 같은 열쇠라도 사용자마다 다른 시험지를 받게 한다.
사용자마다 고유한 random salt를 생성한다.
Password와 salt를 느린 KDF에 넣는다.
Salt, KDF parameter, 결과 hash를 저장한다.
로그인 시 검증 API로 비교하고 role authorization은 별도로 확인한다.
위 순서를 문제 문장 ‘표에 있는 사용자 password 선택을 평가하고 근거를 쓰시오.’에 적용하면, 이 문항의 핵심 결론은 `123456`은 매우 약하고, `king2026`은 예측 가능하며 admin과 bob이 재사용한다. `wonderland2002`도 사전 단어+연도 패턴이다. Eve의 `34@s5wa-rPg5.5`가 상대적으로 강하다. 긴 고유 passphrase와 password manager가 바람직하다.입니다.
정답까지 사고 과정
charlie의 약한 password를 지적한다.
admin/bob의 재사용을 지적한다.
alice의 예측 가능한 패턴을 지적한다.
Eve가 상대적으로 강함을 말한다.
시험장에서는 이렇게 쓰기
핵심 해설
`123456`은 매우 약하고, `king2026`은 예측 가능하며 admin과 bob이 재사용한다. `wonderland2002`도 사전 단어+연도 패턴이다. Eve의 `34@s5wa-rPg5.5`가 상대적으로 강하다. 긴 고유 passphrase와 password manager가 바람직하다.
시험 답안으로 정리하기
charlie의 약한 password를 지적한다.
admin/bob의 재사용을 지적한다.
alice의 예측 가능한 패턴을 지적한다.
Eve가 상대적으로 강함을 말한다.
자주 틀리는 지점
문자 종류만 세고 reuse를 놓치지 않는다.
채점 포인트
charlie의 약한 password를 지적한다.
admin/bob의 재사용을 지적한다.
alice의 예측 가능한 패턴을 지적한다.
Eve가 상대적으로 강함을 말한다.
한 줄로 기억하기
복잡한 기호 하나보다 길이와 고유성이 중요하다. 같은 열쇠를 여러 문에 쓰면 한 곳의 유출이 모든 문을 연다.
스스로 확인하기
길고 고유한 passphrase가 짧고 복잡해 보이는 문자열보다 나을 수 있는 이유는?
AI 구두시험용 프롬프트
한 문항만 풀어라. 먼저 정답을 열지 말고 90초 안에 답안을 말한 뒤, css-ws2025-26-web-php-007의 채점 프레임으로 스스로 채점하라. 문제: 표에 있는 사용자 password 선택을 평가하고 근거를 쓰시오.
학습 기록