* Access Control
- 접근 제어
- 인증과 인가가 존재
- 때론, Access Control = Authorization으로 사용되기도 한다.
ⓐ 인증(Authentication)
- 접근이 허용이 될지를 결정
- 내가 아는 그 상대방인가?
ⓑ 인가(Authorization)
- 사용자는 무엇을 할 수 있는가?
- 행동/동작을 제한
example) LINUX
> Linux login // 인증
> 각 계정마다 동작범위가 제한 // 인가
* Authentication
- 기계가 사람을 인증하는 법에 중심을 둔다.
- 다음을 사용하여 인증을 한다.
1) 사람이 알고 있는 것 / 비밀번호
2) 사람이 가지고 있는 것 / 스마트 카드
3) 사람 자신 자체 인 것 / 지문
--------------------------------------------
* Password(비밀번호)
- 자신만이 알고 있는 비밀 값이다.
- 단점
> 안전하게 저장하기 힘들다.
> 관리하기 힘들다.
> 사람이 암호학적인 암호를 생성/기억하기 힘들다.
- 다른 방법보다 비밀번호를 많이 사용하는 이유
> 비용 : 공짜이다.
> 편리성 : 새로운 스마트 카드를 발행하는 것보다 암호를 다시 만드는 것이 더 쉽다.
* 암호의 문제점
- 문제점을 파악하기 위해 다음을 가정한다.
> 현재 8문자로 이뤄어진 비밀번호를 사용하며, 각 문자마다 256개의 선택권이 존재한다.
- 총 만들 수 있는 암호의 수 = 256 ^ 8 = 2 ^ 64
- 공격자는 평균 2^63 경우의 키를 시도해야 비밀번호를 알아 낼 수 있다.
- 이는 사용자의 비밀번호가 랜덤하다는 가정하에 이뤄진 것으로, 수학적 수치로는 매우 안전하다.
- But, 사용자는 암호를 랜덤하게 선택하지 않는다.
- 공격자는 사용자가 자주 사용하는 비밀번호를 사전화 하여 가지고 있다.(dictionary attack이 가능)
> 이는 2^63보다 적은 수의 시도로 비밀번호를 풀어낼 수 있게 해준다.
- 암호의 비 랜덤성이 문제가 되게 된다.(사람의 기억력의 한계에 의해서... 비랜덤하게 암호는 생성된다.)
* 문장 암호
- 연상하기 쉬운 문장으로 구성된 암호
- Random으로 생성된 암호와 비슷한 해독률을 보장(안전성 보장)
- 추가적으로 사람이 기억하기도 쉽다.
exam) KimIsGenius!
* 암호 사용의 권고 사항
- 문장 암호에 기반을 둔 암호를 선택한다.
- 암호 해독 도구를 사용하여 테스트한다.
- 주기적으로 암호를 변경한다.
* 암호에 대한 공격
- 외부 공격자는 시스탬 사용자중 일반적 사용자를 공격한다.
- 일반적 사용자를 해킹하면, 그 사용자로 로그인, 권한을 상승하여 관리자 모드로 침투를 한다.
- 즉, 공격자는 시스템 사용자 전체중 한명만 해킹을 하면 된다.(여러 사람이 모두 권고 사항을 지키기는 힘들다)
- 이에 대한 방지법으로 Trial delay 시간을 둘 수 있다.
> 하지만 이는 문제점을 가지고 있다.
> 시간이 너무 짧은 경우에는 무용지물이 되고, 시간이 긴 경우에는 사용자 또한 시스템에 접근이 불가하여 DoS공격이 된다.
* 암호 검증
- 암호 파일을 보관하는 것은 잘못된 행위이다.
- 하지만, 사용자 인증을 위해서는 어쩔수 없이 암호파일이 유지되야한다.
- 암호 파일에 대한 다음 3가지 경우를 알아본다.
1) 암호를 그대로 파일에 보관
> 이는 파일이 해킹 당하면 모든 사람의 비밀번호를 알게 된다.
2) 암호를 해쉬하여 해쉬된 값을 보관한다.
> hash(password)값을 저장
> 공격자는 암호 파일을 얻는다고 해도 암호를 찾아 낼 수 없다.
> 공격자는 추측한 암호를 이용해여 hash(x)를 계산한뒤 암호를 찾아 낼 수 는 있다.
> hash(password)를 저장하는 것은 직접적으로 공격자가 암호파일을 사용하는 것에 대해서만 방지가 된다.
> 공격자가 만약, 암호사전을 보유한 경우라면...
~ 모든 사전 값에 대해서 hash를 실시한다. // 이때 사전에는 m개의 단어가 저장되있다고 한다.
~ 각각의 해쉬 값을 암호 파일의 값들과 비교를 실시한다. // 이때 암호파일에는 n개의 단어가 저장 되있다고 한다.
~ 공격자는 총 n*m번 비교를 통해서 사전 공격을 실시 할 수 있다.
3) Salt value를 이용하여 해쉬를 실시한다.
> Salt value : CBC의 IV와 같은 역할로, 랜덤값을 생성하여 hash시 첨가한다. >> hash(password, salt)
> 그리고 암호파일에는 salt value, hash(password, salt)로 저장을 한다. salt값은 비밀이 아니다.
> 또한, 모든 사용자는 다른 salt값을 가진다.
> 이 경우는 공격자가 해야할 일을 증가시키게 된다.
> 공격자가 암호사전을 보유하고 공격을 하는 경우에는...
~ 각각의 사전값에 Salt값을 모두 적용하여 해쉬사전을 만들어야 한다.
// 보유한 사전에 m개의 단어가 있고, 암호파일에 n개의 단어가 있다면 n개의 salt값이 존재하게 된다.
// 즉, n * m번을 통해 해쉬 사전을 생성 가능하다.
~ 생성된 사전을 각각의 해쉬 값과 비교해야 한다. // 위에서 나왔듯이 암호파일에는 n개의 단어가 존재한다.
~ 공격자는 총 n*m*n번의 시도를 해야 한다.
* 암호해독
- 암호 해독을 수학적으로 계산하기 위해서 다음을 가정한다.
> 8개의 문자 암호 사용, 각 문자당 128가지의 문자를 저장 가능
> 공격자에게 사전이 있다면 그 사전은 2^20개의 단어를 보유할 것이다.
> 사전에서 암호가 발견될 확률은 1/4라고 가정한다.
> 암호파일이 주어진 경우 2^10개의 단어가 적혀 있다.
> 해쉬 측정 횟수르 암호 해독 여부를 결정한다.
- 총 가능한 암호의 개수 128^8 = 2^56
ⓐ Case 1: password without dictionary
- 2^56 / 2 = 2^55 의 해쉬를 시도해야 한다.
- 이는 exhaustive key search와 동일한 시도 횟수이다.
ⓑ Case 2: Password with dictionary
- 1/4(2^20/2) + 3/4(2^55) = 약 2^54.6
- 사전에서 발견될 확률 + 사전에서 발견되지 않을 확률
ⓒ Case 3: 암호 파일을 습득한 후 사전 없이 공격
- 특정 값 x를 해쉬한 값 h(x)가 암호 파일에 있을 확률은 1/2^10 이다.
- 2^56를 시도하면 모든 경우에 대한 hash값을 알 수 있다.
- 2^55 / 2^10 = 2^45 이 된다.
- 만약 salt값이 첨가 되있다면, 암호 파일의 단어수인 2^10만큼을 더 곱한 값이 된다. = 2^55
ⓓ Case 4: 암호 파일을 습득한 후 사전으로 공격
- 적어도 하나의 암호가 사전에 있을 확률이 거의 1에 가깝다.
- 즉, 2^20/2/2^10 = 2^9의 시도로 해킹이 가능하다.
- salt값을 친다고 쳐도 2^10이 곱해진 2^19의 시도만으로 해킹이 가능하게 된다.
* 암호의 기타 문제점들
- 기억하기에 너무 많다.
> 같은 암호를 여러군데서 사용하게 된다.
- 사회 공학적인 문제 존재
> 암호를 가르쳐달라고 하면 34%는 암호를 가르쳐주고, 자신에게 이득이 있다고 생각되면 70%는 알려준다.
- Error log에는 대부분 암호가 포함되는 경우가 많다.
- 암호를 훔쳐보는 SW가 존재한다.
- 암호를 해독하는 많은 도구가 존재한다.
* 암호의 결론
- 공격자에게 매우 유리하다.
- 하지만, 비용적 측면과 편리성 때문에 많이 사용하게 된다.
--------------------------------------------
* 생체인식
- 스스로가 가지고 있는 자기 자신인 것으로 인증을 한다.
- 지문, 음성, 얼굴, 홍체, ...
- 사용 추이가 늘면서 활발하게 연구가 되고 있다.
- 생체인식에 대한 안좋은 시각들도 존재한다.(문제점)
> 사회적으로 개인의 권리가 침해된 것으로 생각하여 수용되지 않을 수 있다.(Privacy)
> 도난 가능성이 존재한다.
> 취소가 불가능하다.
* 이상적인 생체 인식
1) 보편성 : 모든 사람에게 적용이 가능하다.
2) 구별성 : 확실하게 사람을 식별해 내야 한다.
3) 영구성 : 구분할 때 사용되는 정보는 변화가 되서는 안된다.
4) 수집성 : 데이터를 수집/등록하기가 용의해야 한다.
* 생체 인식 모드
- 식별/Identification : 누가 거기에 있는가? 일대 다수의 비교
- 인증/Authentication : 정말로 그가 그인가? 일대 일 비교
- 식별의 문제가 더 어렵다.
- 사람들은 인증에는 협조하겠지만, 식별에는 비협조적일 수 있다.(신분을 의도적으로 숨기기 위해서)
* 생체 인식 시스템 단계
1) 등록단계 : 생체 인식 정보를 데이터로 보관
2) 인식단계 : 생체 인식정보를 검색, 빠르고 간단해야 한다.
* 생체인식 에러
1) 기만율 : A를 B를 오인한다.
2) 모욕율 : A를 A로 인식하지 못한다.
- 99%의 음성 매치를 원한다 : 기만율이 떨어지지만 모욕율이 증가하게 된다.
- 30%의 음성 매치를 원한다 : 모욕율이 떨어지지만 기만율이 증가하게 된다.
- 기만율 = 모욕율일 때가 가장 좋은 측정치가 된다.
* 생체 인식 : 지문
1. 지문 이미지를 캡쳐한다.
2. 이미지를 선명하게 processing한다.
3. Minutia를 식별한다.
> Minutia : 지문을 특정지을 수 있는 곳
> 시스템 마다 Minutia 개수와 장소는 다르다.
* 생체 인식 : 손
- 장점
> 신속하다. (등록에 1분 인식에 5초)
> 대칭 적이기 때문에 좋다(?)
- 단점
> 너무 어리거나 늙은 사람에게 사용이 불가능한다.
> 손은 지속적으로 변화하여 에러가 나타난다.
* 생체 인식 : 홍체
- 홍체의 발달 패턴은 모두다 다르고 사람마다 다르다.
- 유전적 영형이 거의 없게 된다.
- 패턴은 일생 동안 바뀌지 않는다.
- 스캔 과정
1) 스캐너를 홍체에 위치시킨다.
2) 흑백 사진을 찍는다.
3) 홍체를 처리한다.
4) 256bytes의 홍체 코드를 얻는다.
- 홍체의 인식/유사성 측정
> Hamming distance에 기반을 둔다.
> 이는 d(x,y)로 정의하여 (non match bit)/(total bit)으로 계산한다.
ex) d(101111,101001) = 1/3
> 동일한 홍체의 경우 기대값은 0.08이다.
> 실사용에서는 0.32 이하인 경우 매치된 것으로 인정한다.('기만율 = 모독율'시점)
* 생체인식 에러율
- 지문 : 5%
- 손 : 10^(-3)
- 홍체 : 10^(-6)
- 에러율은 이론적으로 생산된 것이다.
- 실제로 사용할때에는 지문이 매우 우수하다.
- 생체인식은 인증에는 유용하지만 식별에는 유용하지 않다.
* 생체 인식 결론
- 위조하기 어렵다.
- 생체 인식을 위한 소프트웨어가 존재하며, 이를 공격하는 것은 가능하다.
- 손상된 생체 정보를 복구하는 방법이 아직 존재하지 않다.
--------------------------------------------
* Smart card
- 사람이 가지고 있는 물건으로 자신을 인증한다.
- 차키, 노트북, 신용카드, ...
- 인증 과정
1. A는 자신을 인증할 것이라고 기계에게 전달
2. 기계는 랜덤값을 생성하여 A에게 전달
3. A는 비밀번호 생성기에 랜덤값과 자신의 고유 식별 번호(카드에 적용된)를 보낸다.
4. 비밀번호 생성기는 이를 이용해 특정값을 만들어 A에게 전달한다.
5. A는 기계에게 이를 전달하여 자신을 인증한다.
--------------------------------------------
* 인증에 대한 또다른 이슈들
1. 2-factor authentication ( 인증 방법으로 하나의 요소만 사용하는 것이 아니라 두가지 요소를 함께 사용)
2. Sign-on 한번의 인증으로 전체를 인증한다. ( 반복적 작업의 해소)
3. 웹 쿠키 : 웹사이트의 통합 Sign-on / 프라이버시 문제가 존재