banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận bảo mật Các cách xác thực người dùng bằng mật khẩu  XML
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 22/05/2009 05:31:29 (+0700) | #31 | 181396
MrNothing
Member

[Minus]    0    [Plus]
Joined: 04/01/2008 11:05:37
Messages: 76
Offline
[Profile] [PM]
@mrro: Đúng bác Steven M.Bellovin đấy. Đỉnh ghê smilie
Dù có strong protocol cỡ nào cũng bị attack thì đúng (nghe lén, Key logger, offline guessing password, replay, man in the middle,...). Khi attacker có hết cả các thứ mình có thì tèo là chắc rồi. Hoặc chơi như choc_ là sửa code của client/server application hoặc cái thư viện đi kèm thì chắc chắn cũng tèo.

Nhưng một giao thức bảo mật tốt thì bản thân nó phải đủ mạnh đã, ít nhất cũng phải chống được các tấn công cơ bản.

(Như bài mrro làm với codegate Diffie Hellman: mình cũng đồng ý là nếu có một giao thức đang có vulnerabilities thì việc sửa nó cho nó hoàn thiện hơn thì rất khó, chưa chắc đã hoàn thiện hơn mà độ phức tạp tính toán lại cao lên nữa, có khi còn mắc thêm những lỗi khác)

Dù sao với password không cũng chỉ là giao thức 1 yếu tố. Giờ thì người ta chơi 2 yếu tố, hoặc hơn, xác thực qua nhiều tầng, và có thể có thêm các cơ chế kiểu one time password hoặc các kiểu xác thực qua nhiều con đường khác. Nhất là với các giao thức e-commerce như internet banking.

về ý kiến của mrro:
1. Lấy pass qua con đường khác thì thôi khỏi nói smilie, chết chắc rồi
2. Nếu mất pass thì chỉ lộ PU, chứ không lộ PR.
3. Đồng ý. Biết session key sk và nonce thì chỉ việc vét cạn pw tìm xem PU nào tương ứng có E(PU_dự_đoán,sk||nonce)= E(PU_thật,sk||nonce), tuy nhiên kiểu gì chả có cơ chế vượt qua cái này, sửa protocol 5 một tí là xong.

@mfeng: Không có cơ chế để verify PU đâu bạn ạ. Ra PU_dự_đoán nhưng cũng chả biết sk với nonce là bao nhiêu mà verify.
Alice có thể gửi tin nhắn kèm theo ID: ví dụ M1= Alice, E(pw, PU).

Giao thức này còn dễ dàng bị DoS nữa. Vì message dành cho integrity và authentication nằm ở bước cuối cùng.

Bob cứ nhận được tin nhắn là giải mã và send lại cho Alice. Alice thì cứ giải mã xong trả lại cho Bob. Khi đó Bob mới giải mã kiểm tra nonce xem có đúng không!




[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 22/05/2009 05:48:13 (+0700) | #32 | 181398
mrro
Administrator

Joined: 27/12/2001 05:07:00
Messages: 745
Offline
[Profile] [PM]

MrNothing wrote:

1. Lấy pass qua con đường khác thì thôi khỏi nói smilie, chết chắc rồi
2. Nếu mất pass thì chỉ lộ PU, chứ không lộ PR.
3. Đồng ý. Biết session key sk và nonce thì chỉ việc vét cạn pw tìm xem PU nào tương ứng có E(PU_dự_đoán,sk||nonce)= E(PU_thật,sk||nonce), tuy nhiên kiểu gì chả có cơ chế vượt qua cái này, sửa protocol 5 một tí là xong.
 


1. Đâu có bạn, strong password protocol thì phải giải quyết được vấn đề verifier không phải lưu trữ plaintext-equivalent password. Vẫn có protocol làm được đó, bất chấp nhìn vào database của verifier cũng không thể tìm được password. Thậm chí mục tiêu họ đặt ra còn là thứ mà verifier lưu trữ là thông tin public luôn. Mình không nhớ là có protocol nào làm được hay không.

2. mất password thì ở bước 1 và bước 2, attacker đã có thể lấy được session key của những session trước đó. mình không nói là mất PU hay PK. một protocol tốt là protocol phải đảm bảo được tính forward secrecy, nghĩa là có mất password hay một cái long-term shared-key nào đó thì attacker vẫn không learn được gì ở các session trong quá khứ.

3. sửa thế nào?
http://tinsang.net

TetCon 2013 http://tetcon.org

Làm an toàn thông tin thì học gì?/hvaonline/posts/list/42133.html
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 22/05/2009 05:51:15 (+0700) | #33 | 181399
MrNothing
Member

[Minus]    0    [Plus]
Joined: 04/01/2008 11:05:37
Messages: 76
Offline
[Profile] [PM]
2. Session key của các cái trước đó được mã hóa bằng PU mà. Không có PR thì sao giải mã ra session key.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 22/05/2009 06:16:06 (+0700) | #34 | 181402
mrro
Administrator

Joined: 27/12/2001 05:07:00
Messages: 745
Offline
[Profile] [PM]
@MrNothing: àh mình nhầm, do notation của bạn hơi bị lộn xộn. Mình nghĩ nên mô tả protocol theo chuẩn cho dễ đọc nhỉ?
http://tinsang.net

TetCon 2013 http://tetcon.org

Làm an toàn thông tin thì học gì?/hvaonline/posts/list/42133.html
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 22/05/2009 06:17:44 (+0700) | #35 | 181403
MrNothing
Member

[Minus]    0    [Plus]
Joined: 04/01/2008 11:05:37
Messages: 76
Offline
[Profile] [PM]
Tại mình quy ước viết E(PU, sk||nonce) là mã hóa dưới dạng Public Key PU nên dễ hiểu nhầm, sorry!

mrro wrote:

1. Đâu có bạn, strong password protocol thì phải giải quyết được vấn đề verifier không phải lưu trữ plaintext-equivalent password. Vẫn có protocol làm được đó, bất chấp nhìn vào database của verifier cũng không thể tìm được password. Thậm chí mục tiêu họ đặt ra còn là thứ mà verifier lưu trữ là thông tin public luôn. Mình không nhớ là có protocol nào làm được hay không.
 

1. Theo tớ hiểu ý bạn bạn nói đến cái dùng để xác thực có thể được public, thì phải khó tạo ra cái cần được xác thực. Tớ thấy nó cơ chế có vẻ giống với public key! Như kiểu server lưu PU, client có PR ấy nhỉ?

mrro wrote:

Vẫn có protocol làm được đó, bất chấp nhìn vào database của verifier cũng không thể tìm được password
 

Có ví dụ cho cái này không mrro?Cơ chế cho nó là gì nhỉ?
3. Bob tạo ra PU_Bob nữa smilie.


Code:
1. Alice tạo (PR_Alice,cPU_Alice), và gửi Bob:M1= Symmetric_encryption(pw,PU_Alice)
2. Bob tạo (PR_Bob, PU_Bob), và gửi Alice: M2= Asymmetric_encryption(PU_Alice, PU_Bob)
3. Alice gửi Bob: M3=Asymmetric_encryption(PU_Bob, sk||nonce)
4. Bob gửi Alice: M4=Symmetric_encryption(sk,nonce)


@mrro: đã sửa
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 22/05/2009 06:24:36 (+0700) | #36 | 181405
mrro
Administrator

Joined: 27/12/2001 05:07:00
Messages: 745
Offline
[Profile] [PM]

MrNothing wrote:

1. Verifier lưu trữ là thông tin public luôn giả sử nó là U. Giả sử attacker có giải thuật verify+ cái verify lưu trữ. Thế thì vấn đề sẽ là khó có thể tạo ra cái được nào được verify bới verifier và U. Nguyên lý này giống hàm một chiều nhỉ? Lại thành hệ Public Key rồi.
 


@MrNothing: có vẻ bạn ít bao giờ tự đọc lại bài viết của mình nhỉ? Mình đọc cái đoạn bạn viết ở trên mà không hiểu bạn muốn nói gì hết.
http://tinsang.net

TetCon 2013 http://tetcon.org

Làm an toàn thông tin thì học gì?/hvaonline/posts/list/42133.html
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 22/05/2009 06:43:51 (+0700) | #37 | 181407
MrNothing
Member

[Minus]    0    [Plus]
Joined: 04/01/2008 11:05:37
Messages: 76
Offline
[Profile] [PM]
@mrro: tớ sửa rồi nhé smilie. Thanks!
Thực ra cái trò PU, PR trên để giải quyết tình trạng weak password (lời này của bác Steven M.Bellovin). Nhưng tớ thấy nó cũng vui nên mới nêu ra.

Chứ để dùng cho các cái quan trọng thì nên dùng strong password. Để mọi người khỏi băn khoăn là mình dùng password 6 kí tự mà vẫn bị crack là sao. Để 10 ký tự attack cả tháng thì 6 kí tự vét cạn nhanh hơn. Tớ thấy giờ đa phần họ yêu cầu password là 8 kí tự đổ lên gồm cả kí tự hoa và số!
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 22/05/2009 08:10:43 (+0700) | #38 | 181414
StarGhost
Elite Member

[Minus]    0    [Plus]
Joined: 29/03/2005 20:34:22
Messages: 662
Location: The Queen
Offline
[Profile] [PM]
Xôm ghê ta.

@mfeng: mình có nói là entropy không phụ thuộc chứ không phải "messages không phụ thuộc". MrNothing đã giải thích rõ hơn rồi.

@mrro: câu hỏi của mình là "tại sao các protocol này không được dùng phổ biến?", bạn ạ. Lí do là vì:
1. Đây là protocol đời đầu của dòng encrypted key exchange (EKE), nên hiển nhiên nó còn có nhiều khuyết điểm, không thể áp dụng ngay được. Ví dụ như bị DoS như ở trên.
2. Kể cả đến các protocol đời sau đã được chau chuốt nhiều, vẫn không được dùng phổ biến. Lí do khá đơn giản và lãng xẹt: chúng bị patented, hơn nữa là bị patented bởi nhiều researchers. Thế nên việc đưa vào một product đã rất phức tạp, chưa nói đến việc phổ biến.

Ngoài ra, mrro còn thắc mắc về cái khoản plaintext password database ở trên server thì vulnerable. Thực ra, sửa lại protocol này một chút cũng không có gì khó, mặc dù không hoàn toàn là tuyệt đối secure. Mình sử dụng luôn notations của MrNothing, trong đó Bob chứa func(pw, salt), còn Alice chứa pw:

Code:
1. Bob ---> Alice: salt
    Alice tính h=func(pw,salt)
2. Alice ---> Bob: E(h,PU)
3. Bob ---> Alice: E(PU, sk||nonce)
4. Alice ---> Bob: E(sk, nonce || pw)
Mind your thought.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 22/05/2009 09:26:10 (+0700) | #39 | 181420
mrro
Administrator

Joined: 27/12/2001 05:07:00
Messages: 745
Offline
[Profile] [PM]
@StarGhost:

1. ủa thì sao, mình nói là ít được sử dụng thì kô phải đồng nghĩa với "không phổ biến" àh. lý do patent thì mình có biết.

2. cái mà bạn đưa ra thì nó cũng được xếp vào dạng plaintext-equivalent password thôi, có thêm salt rồi hash lại cũng vậy àh. thế người ta mới kêu là plaintext-equivalent password mà không phải là plaintext password. đơn giản vì có được cái hash đó thì attacker chỉ cần bắt đầu cái protocol ở bước 2 là có thể giả mạo được Alice rồi.
http://tinsang.net

TetCon 2013 http://tetcon.org

Làm an toàn thông tin thì học gì?/hvaonline/posts/list/42133.html
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 22/05/2009 11:32:16 (+0700) | #40 | 181431
mfeng
Researcher

Joined: 29/10/2004 15:16:29
Messages: 243
Offline
[Profile] [PM]
Các tiêu chí của một giao thức xác thực cần có sẽ là:
1. Chống sniffer
2. Chống replay
3. Có trao đổi session key.
4. Mutual auth
5. Chống được dictionary-attack dựa trên sniff messages
6. Đảm bảo forward secrecy.
7. Chống được tình huống compromised verifier database (chứa các thông tin bên server để auth).

Theo các tiêu chuẩn trên, tất cả các protocol đang bàn luận này đều không thỏa mãn, nhất là 3 điều kiện cuối cùng, được gọi là "Big-3" của auth. Điều kiện thứ 7 chính là vấn đề mrro nói làm sao để cài đặt giao thức không dùng plaintext-equivalent password.

Ít ra hiện giờ có một giao thức thỏa mãn 7 điều kiện trên, được viết thành RFC 2945. Các bạn thử tìm hiểu và phân tích xem smilie.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 22/05/2009 12:06:25 (+0700) | #41 | 181432
MrNothing
Member

[Minus]    0    [Plus]
Joined: 04/01/2008 11:05:37
Messages: 76
Offline
[Profile] [PM]
Cái 5,6 thì không có vấn đề hiện nay nhé.
Cái 7: Thông tin lưu trên server để verify. Nếu có thể public được thì nó chính là dạng public key rồi. Server chứa một cái gì đó public dùng để verify một cái gì đó private từ client. Như là mô hình Digital Signature của Public Key.

Mấy kiểu salt thì vẫn bị lỗi 7 thôi.

Còn nếu dùng public key cho phía client. Server tất nhiên chỉ lưu client public key hoặc public key của thằng kí lên certificate của client. Sẽ chuyển sang dạng tấn công client/server lấy private key và password cho private key.


RFC 2945 wrote:

The server stores user credentials as 5-tuples of the form:
{<username>, <password verifier>, <salt>, g, N}
<salt> = random()
x = SHA(<salt> | SHA( <username> | ":" | <raw password> ) )
<password verifier> = v = g^x % N
N = prime modulus; g = generator



 


#Trong giao thức chuẩn thì họ dùng thừa số 1 thay cho thừa số 3 ở trên.

Tấn công server lấy file chứa bộ {<username>, <password verifier>, <salt>, g, N} rồi giả mạo client thì sao nhỉ? hoặc đổi file này nữa?
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 22/05/2009 14:30:38 (+0700) | #42 | 181440
mrro
Administrator

Joined: 27/12/2001 05:07:00
Messages: 745
Offline
[Profile] [PM]

MrNothing wrote:

Tấn công server lấy file chứa bộ {<username>, <password verifier>, <salt>, g, N} rồi giả mạo client thì sao nhỉ? hoặc đổi file này nữa?
 


Chẳng làm được gì cả. Có password verifier cũng không thể tìm ra password. Cái khó ở đây là bài toán discrete logarithm.

http://tinsang.net

TetCon 2013 http://tetcon.org

Làm an toàn thông tin thì học gì?/hvaonline/posts/list/42133.html
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 22/05/2009 15:01:01 (+0700) | #43 | 181441
StarGhost
Elite Member

[Minus]    0    [Plus]
Joined: 29/03/2005 20:34:22
Messages: 662
Location: The Queen
Offline
[Profile] [PM]
@mrro: có vẻ bạn vẫn chưa đọc kĩ protocol mình đưa ra. Mình nghĩ nó thỏa mãn 2 trong 3 điều kiện cuối của mfeng. Còn 4 điều kiện ban đầu thì thực sự không quá khó để đạt được. Còn về forward secrecy thì protocol này fail.
Mind your thought.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 22/05/2009 15:56:51 (+0700) | #44 | 181443
mrro
Administrator

Joined: 27/12/2001 05:07:00
Messages: 745
Offline
[Profile] [PM]

StarGhost wrote:

trong đó Bob chứa func(pw, salt), còn Alice chứa pw:

1. Bob ---> Alice: salt
Alice tính h=func(pw,salt)
2. Alice ---> Bob: E(h,PU)
3. Bob ---> Alice: E(PU, sk||nonce)
4. Alice ---> Bob: E(sk, nonce || pw)
 


Giả sử attacker lấy được func(pw, salt). Nghĩa là hắn lấy được h ở bước số 2 đúng không? Vậy thì hắn có thể giả mạo Alice rồi còn gì nữa nhỉ? Mình sai ở chỗ nào nhờ bạn StarGhost chỉ giùm.

PS: àh thấy rồi. có bước số 4.
http://tinsang.net

TetCon 2013 http://tetcon.org

Làm an toàn thông tin thì học gì?/hvaonline/posts/list/42133.html
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 22/05/2009 16:13:28 (+0700) | #45 | 181446
StarGhost
Elite Member

[Minus]    0    [Plus]
Joined: 29/03/2005 20:34:22
Messages: 662
Location: The Queen
Offline
[Profile] [PM]
@mrro: còn bước cuối (4) nữa.
Mind your thought.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 22/05/2009 16:25:48 (+0700) | #46 | 181448
mrro
Administrator

Joined: 27/12/2001 05:07:00
Messages: 745
Offline
[Profile] [PM]
@StarGhost: mình nghĩ bước số 4 này lại làm phát sinh một vấn đề


4. Alice ---> Bob: E(sk, nonce || pw)
 


Attacker mà có func(pw, salt), thì hắn chỉ cần lắng nghe một cái session giữa Alice và Bob là hắn tìm được pw, khỏi phải brute-force chi nữa.

Ngoài ra thêm cái số 4 này, có thể ngăn attacker giả mạo Alice, nhưng không thể ngăn attacker giả mạo Bob, một khi hắn đã có (salt, func(pw, salt)).

http://tinsang.net

TetCon 2013 http://tetcon.org

Làm an toàn thông tin thì học gì?/hvaonline/posts/list/42133.html
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 22/05/2009 19:27:21 (+0700) | #47 | 181451
MrNothing
Member

[Minus]    0    [Plus]
Joined: 04/01/2008 11:05:37
Messages: 76
Offline
[Profile] [PM]
Giao thức của bạn StarGhost vẫn chưa đủ rồi. Nếu salt chỉ loanh quanh luẩn quẩn ở các hàm cơ bản thì khó. Phải đưa lên dạng hàm một chiều one way function cơ, như x và g^x.
Cái 4 còn vi phạm lỗi lớn là gửi đi password.


Coi lại cái SRP nhé mrro:

1. Nó tấn công server rồi đổi file đó với file chứa password của nó. Giả mạo client là hoàn toàn được.
2. Client lưu trữ password để tính ra x, server lưu g^x. Đây chính là cơ chế của Elgamal Public Key. Cái này hay ở chỗ là với Elgamal public Key thì x phải lớn, còn ở đây mọi thứ được tính qua hàm hash function x= hash(username,s,o) nên password p có thể nhỏ. và còn điều này nữa:
tớ nghe lén nhé: tớ có A, có B, có salt s, có I=username, nhưng tớ muốn verify password bằng vét cạn thì không có a. Bài toán phải giải là Diffie Hellman Problem (Discrete logarithm). Vì vậy không vét cạn được password khi password yếu.

Tuy nhiên vẫn có vấn đề với password yếu:
Attacker tấn công server và có salt và v=g^x, trong khi x=hash(username,salt,p). Nếu password yếu, tớ hoàn toàn vét cạn được và dùng v, verifier để verify p mà tớ dự đoán. Vì ở đây tớ không giải bài toán ngược của bài toán một chiều. Tớ giải đúng theo chiều xuôi. Hoàn toàn offline.

Password vẫn phải đủ mạnh thôi+ bảo mật cả phía client và server!
Tuy nhiên cơ chế trên khá hay để bảo vệ password mạnh. Khi server bị tấn công thì vẫn không bị dò ra password.

Nhưng với password mạnh pw có n bít. Attacker không vét cạn được thì tớ chơi ngay Elgamal.
Elgamal:User giữ pw, Server giữ g^pw. Muốn tìm pw cũng phải vét cạn.
SRP: Ở trên từ pw===>x===>v=g^x. Quá trình vét cạn vẫn như trên.
2 bài toán khó như nhau nhỉ? Tất nhiên thời gian tính g^x từ x là lâu hơn tính g^pw từ pw. nhưng nó cũng không đáng kể! Coi như bài toán SRP khó hơn tí nhưng về độ phức tạp cơ bản là như nhau!

Đây chỉ là một dạng trá hình của Elgamal mà thôi!

(Tạm thời phải vét cạn vì chưa có giải thuật cho Diffie Hellman Problem- hi vọng sẽ không có, nếu có thì thiên hạ lại phải nghĩ ra các giải thuật mới với độ phức tạp khó hơn)





[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 25/05/2009 13:15:18 (+0700) | #48 | 181715
myquartz
Member

[Minus]    0    [Plus]
Joined: 04/01/2005 04:58:30
Messages: 563
Offline
[Profile] [PM]
Trong điều kiện thông thường và dễ triển khai, đáp ứng được các yếu tố 1, 2, 3, và 1 ít 7, thì nên chơi Digest Authentication theo RFC 2617.
Nếu chơi đơn giản, ko code gì hết, thì config HTTP Server hỗ trợ cái này.

Còn nếu tự implementation để tránh browser bị man-in-the-middle lừa thì làm javascript (ko cần đến ajax làm gì cho nó mệt, chỉ là vài step xác thực mà thôi).

Cái này xài hàm hash là MD5, dễ viết java script hơn các hàm mã hoá AES/DES hoặc RSA. Nếu tự handle thay cho HTTP thì xài SHA1 cho nó máu. (Nếu sợ rằng phải lưu HA1 hoặc plain-text password tại client sau khi xác thực, hãy sử dụng 1 session key làm 1 password tạm (hay HA1 tạm cho Digest Auth phiên làm việc) cho các bước tiếp theo cho đến hết phiên làm việc. Session key nên tạo và trao đổi qua 1 giải thuật IKE nào đó, ví dụ Diffie-Hellman cho nó đơn giản (http://en.wikipedia.org/wiki/Diffie-Hellman_key_exchange ). JS có khả năng hỗ trợ tất cả những cái này ở một mức độ nhất định (session key kiểu integer nếu là số to quá 53bit thì các hàm Math không tính chính xác hơn nữa, vì nó sẽ thành số float, có thể viết lại hàm nhân chia số integer thực lớn nhưng ... hơi mệt thôi). Theo ví dụ thì Alice sẽ làm server vì server có thể có gọi nhiều hàm tính ra số nguyên tố lớn tốt hơn client.

Cân bằng giữa giá trị và lợi ích mang lại sẽ là giải pháp được thực tế chấp nhận. Nếu cần bảo mật hơn nữa, đừng tìm kiếm giải pháp xác thực nào khác với password mà cần nâng lên PKI, công nghệ sẵn có, giá thành sẽ rẻ hơn nhiều đưa ra 1 loạt các scheme mới, chưa chắc đã chứng minh được tốt hơn, mà giá thành lại cao. Tất nhiên tranh cãi lý thuyết thì vẽ con voi nó có mấy vòi cũng được, nhưng ... tốn thời gian.
Forum hoặc các ứng dụng web chạy không SSL, nếu cần bảo mật thì có thể triển khai cái này, tuy hơn bị vất 1 tí về việc làm script, nhưng đa số các kiddies sẽ khó ăn cắp được mật khẩu hay xâm nhập cướp session dù có capture được dữ liệu.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 25/05/2009 19:39:26 (+0700) | #49 | 181743
StarGhost
Elite Member

[Minus]    0    [Plus]
Joined: 29/03/2005 20:34:22
Messages: 662
Location: The Queen
Offline
[Profile] [PM]
@myquartz: Hình như bạn còn chưa đọc kĩ và hiểu rõ về mục đích của topic, tức là thảo luận về authentication schemes, chứ không phải là về implementation. RFC 2617 chính là nói về protocol 1 và 2 ngay trong post đầu tiên, cùng với những vấn đề của chúng. Còn nếu nói về implementation, mình thật nghĩ không ra cái javascript của bạn chống được MitM attack kiểu gì.

myquartz wrote:
Cân bằng giữa giá trị và lợi ích mang lại sẽ là giải pháp được thực tế chấp nhận. Nếu cần bảo mật hơn nữa, đừng tìm kiếm giải pháp xác thực nào khác với password mà cần nâng lên PKI, công nghệ sẵn có, giá thành sẽ rẻ hơn nhiều đưa ra 1 loạt các scheme mới, chưa chắc đã chứng minh được tốt hơn, mà giá thành lại cao. Tất nhiên tranh cãi lý thuyết thì vẽ con voi nó có mấy vòi cũng được, nhưng ... tốn thời gian. 

Topic này lập ra đâu phải để làm một project gì đâu mà sợ tốn thời gian hả bạn. Nếu nói như bạn thì phải chăng các nghiên cứu về vấn đề này là dư thừa sao.
Mind your thought.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 25/05/2009 23:36:33 (+0700) | #50 | 181765
myquartz
Member

[Minus]    0    [Plus]
Joined: 04/01/2005 04:58:30
Messages: 563
Offline
[Profile] [PM]

StarGhost wrote:
@myquartz: Hình như bạn còn chưa đọc kĩ và hiểu rõ về mục đích của topic, tức là thảo luận về authentication schemes, chứ không phải là về implementation. RFC 2617 chính là nói về protocol 1 và 2 ngay trong post đầu tiên, cùng với những vấn đề của chúng. Còn nếu nói về implementation, mình thật nghĩ không ra cái javascript của bạn chống được MitM attack kiểu gì.
 


Nếu chỉ thảo luận lý thuyết, không dùng (hoặc không thể) triển khai thì bên dưới mình đã nói là nó sẽ phí thời gian. Sẽ giống như phát minh lại cái bánh xe, vì người ta đã có cái scheme đủ tốt để thực hiện rồi, chính nó là PKI.

RFC 2617 không phải là protocol 2, nó mạnh hơn nhiều, vì không phải chỉ là salt, nó còn thêm nonce, nonceCount, clientNonce... Nó có khả năng chống MitM nếu sử dụng full option, nghĩa là HA2 gồm cả digest của method, URI và nội dung cần gửi đi. Kiểu Digest này chỉ yếu khi nó bị trình duyệt/MitM fail-back về RFC2096 (giống protocol 2).
Tất nhiên RFC 2617 client không xác thực server, không phải là 2-way (mutual) authentication, đó không phải là mục tiêu của nó.
Mình chỉ thấy rằng nó có thể triển khai thực tế để bảo vệ các web site NON-SSL thôi.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 26/05/2009 03:34:01 (+0700) | #51 | 181787
mrro
Administrator

Joined: 27/12/2001 05:07:00
Messages: 745
Offline
[Profile] [PM]

myquartz wrote:

Nếu chỉ thảo luận lý thuyết, không dùng (hoặc không thể) triển khai thì bên dưới mình đã nói là nó sẽ phí thời gian. Sẽ giống như phát minh lại cái bánh xe, vì người ta đã có cái scheme đủ tốt để thực hiện rồi, chính nó là PKI.
 


Bạn myquartz ơi, ở đây người ta đang nói đến việc làm sao có một cơ chế xác thực tốt mà chỉ dựa vào mật khẩu của người dùng thôi. Đây là một hướng nghiên cứu với nhiều công trình của cryptography, chứ không phải là vấn đề đã được giải quyết rốt ráo rồi đâu bạn ơi.

Tự dưng bạn lôi PKI ra, thế bạn thử nói xem một công ty bình thường, muốn xác thực khách hàng qua Internet, thì triển khai PKI thế nào? Mình chẳng biết công ty nào mà lại đi làm cái việc đó cả.

Hình như cái này mình đã có nói một lần ở trên đây, bữa nay nói lại, gọi là mrro's law nha: hễ mà nói về bảo mật hay xác thực, thì không sớm thì muộn sẽ có người kêu phải triển khai PKI thôi.
http://tinsang.net

TetCon 2013 http://tetcon.org

Làm an toàn thông tin thì học gì?/hvaonline/posts/list/42133.html
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 26/05/2009 05:53:55 (+0700) | #52 | 181830
myquartz
Member

[Minus]    0    [Plus]
Joined: 04/01/2005 04:58:30
Messages: 563
Offline
[Profile] [PM]

mrro wrote:

Bạn myquartz ơi, ở đây người ta đang nói đến việc làm sao có một cơ chế xác thực tốt mà chỉ dựa vào mật khẩu của người dùng thôi. Đây là một hướng nghiên cứu với nhiều công trình của cryptography, chứ không phải là vấn đề đã được giải quyết rốt ráo rồi đâu bạn ơi.

Tự dưng bạn lôi PKI ra, thế bạn thử nói xem một công ty bình thường, muốn xác thực khách hàng qua Internet, thì triển khai PKI thế nào? Mình chẳng biết công ty nào mà lại đi làm cái việc đó cả.

Hình như cái này mình đã có nói một lần ở trên đây, bữa nay nói lại, gọi là mrro's law nha: hễ mà nói về bảo mật hay xác thực, thì không sớm thì muộn sẽ có người kêu phải triển khai PKI thôi. 


OK, hiểu ý rồi, khỏi tranh cãi. Lý do: đó là 1 hướng nghiên cứu mới về xác thực bằng mật khẩu (một cách đơn giản mà lại bảo đảm an toàn). Dự định áp dụng: cho dịch vụ web NON-SSL.
Nếu thế nên thảo luận thêm 1 số cái scheme nữa, ví dụ CHAP, MS-CHAP, MD5-Challenge, EAP, NTLM...

Theo quan điểm của tớ, giới nghiên cứu không tiếp tục đổ công sức thêm vào authentication scheme vì hiện đã có quá nhiều rồi. Nếu không sử dụng các công nghệ mã hoá và bảo đảm tính toàn vẹn, thì nghĩ ra 1 auth scheme thoả mãn 1-7 gần như là rất khó đạt được, hoặc scheme đó phải làm lại các thứ mà công nghệ SSL chẳng hạn đã có sẵn. Ví dụ việc sử dụng hàm E()/D() rất nhiều, chính nó là mã hoá đấy :-D. Ai tiếp tục theo thì ... xin mời tiếp. Tớ tưởng giúp ích được cho các bạn web master shared host ko có SSL, chứ thế này thì xin ngưng sau cái bài này thôi.

@mrro: À mà PKI ở đây ko chỉ dùng là xác thực 2-way, rất tốn kém và phức tạp. Nó có thể là phương pháp xác thực 1-way là SSL (đã có 1 loạt chức năng an ninh rồi) với server-certificate only, ko cần client-cert. Với way còn lại là bằng cách chọn 1 trong các công nghệ công nghệ xác thực password hiện có ví dụ digest hay đơn giản là basic/form, người ta đã có 1 giải pháp khá hoàn chỉnh để chống được từ 1-7 rồi (tất nhiên còn 1 số nguy cơ khác nhưng nó là ở tại host).
Cách kết hợp này không phải là mới, ví dụ Wifi (rất kém bảo mật, y như tình huống thảo luận trên đây) với EAP-TLS, client xác thực bằng user/pass, server xác thực bằng server-certificate, mã hóa và bảo đảm toàn vẹn bằng TLS, là giải pháp kết hợp 2 thứ, nhưng nhìn từ client vẫn là ... password.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 26/05/2009 08:24:49 (+0700) | #53 | 181859
StarGhost
Elite Member

[Minus]    0    [Plus]
Joined: 29/03/2005 20:34:22
Messages: 662
Location: The Queen
Offline
[Profile] [PM]

myquartz wrote:
Theo quan điểm của tớ, giới nghiên cứu không tiếp tục đổ công sức thêm vào authentication scheme vì hiện đã có quá nhiều rồi.  

Bạn myquartz dựa vào đâu mà nói hay vậy?

myquartz wrote:
RFC 2617 không phải là protocol 2, nó mạnh hơn nhiều, vì không phải chỉ là salt, nó còn thêm nonce, nonceCount, clientNonce... Nó có khả năng chống MitM nếu sử dụng full option, nghĩa là HA2 gồm cả digest của method, URI và nội dung cần gửi đi. Kiểu Digest này chỉ yếu khi nó bị trình duyệt/MitM fail-back về RFC2096 (giống protocol 2).
Tất nhiên RFC 2617 client không xác thực server, không phải là 2-way (mutual) authentication, đó không phải là mục tiêu của nó.
Mình chỉ thấy rằng nó có thể triển khai thực tế để bảo vệ các web site NON-SSL thôi. 

RFC 2617 đề cập đến 2 scheme, một cái là basic, cái kia là digest. Cái basic thì là protocol 1, cái digest ý tưởng chính là protocol 2, chỉ có điều nó thêm nonce để chống replay attacks. Còn lại mình không thấy có gì nổi trội ở đây mà có thể coi như là thay thế (thậm chí là miễn cưỡng) SSL cả. Còn bạn nói nó có khả năng chống MitM thì mình cho rằng không chính xác, vì message authentication chỉ là one-way.

Ngược lại, RFC 2617 làm việc được dựa trên giả định rằng xác suất malicious MitM xuất hiện là vô cùng thấp, chứ nếu mà có nhiều MitM thì thôi rồi. Giả định này trên thực tế đúng phần nào với WWW, nhưng nếu như vậy, thì ngay đến Basic authentication cũng đã đủ rồi, chứ còn dùng digest authentication làm gì.
Mind your thought.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 26/05/2009 08:37:23 (+0700) | #54 | 181863
mrro
Administrator

Joined: 27/12/2001 05:07:00
Messages: 745
Offline
[Profile] [PM]

myquartz wrote:

Theo quan điểm của tớ, giới nghiên cứu không tiếp tục đổ công sức thêm vào authentication scheme vì hiện đã có quá nhiều rồi.
 


Để mình trích một đoạn từ một bài báo mới đây của Cambridge Computer Security Lab nha (có bác Ross Anderson tác giả của Security Engineering với nhiều bác khác, có thể coi là một trong những lab hùng mạnh nhất thế giới về computer security và cryptography):

Feng Hao wrote:


Password Authenticated Key Exchange (PAKE) is one of the central topics in cryptography. It aims to address a practical security problem: how to establish secure communication between two parties solely based on their shared password without requiring a Public Key Infrastructure (PKI).

The solution to the above problem is very useful in practice — in fact, so useful that it spawns a lot “fights” over patents. Many techniques were patented, including the well-known Encrypted Key Exchange (EKE) and Simple Password Exponential Key Exchange (SPEKE). A secondary problem is technical; both the EKE and SPEKE protocols have subtle but worrying technical limitations (see the paper for details).

At the 16th Workshop on Security Protocols held in April 2008, Cambridge, UK, I presented a new solution (joint work with Peter Ryan) called Password Authenticated Key Exchange by Juggling (or J-PAKE). The essence of the protocol design inherits from the earlier work on solving the Dining Cryptographers problem; we adapted the same juggling technique to the two-party case to solve the PAKE problem. To our best knowledge, this design is significantly different from all past PAKE solutions.
 


Xem thêm: http://www.lightbluetouchpaper.org/2008/05/29/j-pake/

http://tinsang.net

TetCon 2013 http://tetcon.org

Làm an toàn thông tin thì học gì?/hvaonline/posts/list/42133.html
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 26/05/2009 11:37:46 (+0700) | #55 | 181885
StarGhost
Elite Member

[Minus]    0    [Plus]
Joined: 29/03/2005 20:34:22
Messages: 662
Location: The Queen
Offline
[Profile] [PM]

MrNothing wrote:
Giao thức của bạn StarGhost vẫn chưa đủ rồi. Nếu salt chỉ loanh quanh luẩn quẩn ở các hàm cơ bản thì khó. Phải đưa lên dạng hàm một chiều one way function cơ, như x và g^x.
Cái 4 còn vi phạm lỗi lớn là gửi đi password. 

Bạn nói chí phải. Nếu chỉ dùng hash thì quả là có limitation. Protocol của mình có thể modify lại và dùng non-interactive ZKP thay vì hash, như vậy chắc sẽ secure, vì dù attacker có giả dạng Bob cũng không thể lấy được password, ngoại trừ việc bruteforce password dựa vào database mà attacker ăn cắp được của Bob (if any).

mrro wrote:
@StarGhost: mình nghĩ bước số 4 này lại làm phát sinh một vấn đề

StarGhost wrote:

4. Alice ---> Bob: E(sk, nonce || pw) 

Attacker mà có func(pw, salt), thì hắn chỉ cần lắng nghe một cái session giữa Alice và Bob là hắn tìm được pw, khỏi phải brute-force chi nữa.

Ngoài ra thêm cái số 4 này, có thể ngăn attacker giả mạo Alice, nhưng không thể ngăn attacker giả mạo Bob, một khi hắn đã có (salt, func(pw, salt)).  

--->Nếu attacker có func(pw,salt) thì vẫn không thể dò ra được pw bằng việc sniff.

---> Mình không nghĩ rằng tồn tại một protocol nào có thể ngăn chặn attacker giả mạo Bob một khi hắn đã nắm trong tay tất cả các secrets của Bob, trong trường hợp này là func(pw,salt).
Mind your thought.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 26/05/2009 13:37:43 (+0700) | #56 | 181901
mrro
Administrator

Joined: 27/12/2001 05:07:00
Messages: 745
Offline
[Profile] [PM]

StarGhost wrote:


1. Nếu attacker có func(pw,salt) thì vẫn không thể dò ra được pw bằng việc sniff.

2. Mình không nghĩ rằng tồn tại một protocol nào có thể ngăn chặn attacker giả mạo Bob một khi hắn đã nắm trong tay tất cả các secrets của Bob, trong trường hợp này là func(pw,salt).

 


1. lol cái notation nó lừa mình như lần trước.

2. bạn StarGhost lại đúng. nhưng ý của mình ở đây là việc giả mạo Bob này đem lại một hậu quả ghê ghớm hơn là ở bước cuối cùng attacker sẽ có password smilie.

lol câu cuối là mình xạo đó. mình không có nghĩ đến cái tình huống đó cho đến khi đọc cái last reply của bạn StarGhost. cần phải "mind your thought" như bạn StarGhost đề nghị :-p.
http://tinsang.net

TetCon 2013 http://tetcon.org

Làm an toàn thông tin thì học gì?/hvaonline/posts/list/42133.html
[Up] [Print Copy]
  [Discussion]   Các cách xác thực người dùng bằng mật khẩu 01/07/2009 09:09:42 (+0700) | #57 | 185089
summerlant
Member

[Minus]    0    [Plus]
Joined: 06/11/2004 21:26:36
Messages: 9
Offline
[Profile] [PM]
@Protocol 2:
- Không bị repaly attack nếu thay đổi salt mỗi lần thực hiện bắt tay.
- Yếu điểm của nó là sever phải lưu trạng thái của quá trình bắt tay và chờ cho client gửi dữ liệu lần thứ 2. Cách khắc phục yếu điểm này mời bạn xem protocol Kerberos.
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|