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
  [Discussion]   Các cách xác thực người dùng bằng mật khẩu 23/04/2009 15:42:44 (+0700) | #1 | 178192
choc_
Member

[Minus]    0    [Plus]
Joined: 27/01/2009 06:46:01
Messages: 122
Offline
[Profile] [PM]
Chào các bạn,

Trong topic của MrNothing (thật ra topic này cũng giống topic kia thôi, nhưng mình viết lại cho nó dễ nắm bắt hơn), mình có nói bài toán mà MrNothing đặt ra là rất phổ biến, tự vì nó là một dạng tổng quát hơn của bài toán làm thế nào xác thực được người dùng bằng mật khẩu.

Mình thấy bây giờ mọi người nhào nhào làm two-factor authentication, rồi multi-factor authentication, nhưng hình như cái cách xác thực đơn giản nhất là xác thực bằng mật khẩu vẫn chưa được làm đúng cách.

Ví dụ, site HVAOnline.net này nha (mình chỉ đưa ra ví dụ cho nó dễ thấy thôi, chứ một website như HVAOnline thì kô cần phải làm cái gì khác hơn). Có hai form xác thực, một là xuyên qua HTTP, hai là xuyên qua HTTPS. Mình không quan tâm đến tầng transportation ở đây, bởi mình đưa ra một yêu cầu là: luôn có người theo dõi trên đường truyền. Nói cách khác, protocol phải an toàn bất kể kênh truyền như thế nào. Nên tính ra thì HVAOnline chỉ có một protocol như sau:

Protocol 1 wrote:


1. User gửi (ID, P) cho Host, trong đó P là plaintext password của User

2. Căn cứ vào ID, Host lấy từ database ra A, là một biến thể của password của User và salt, là một chuỗi ngẫu nhiên gắn liền với ID của user. Host thực hiện một phép tính trên P (thông thường là B = H(P, salt), trong đó H là một hàm băm một chiều nào đó) để tính ra B, rồi so sánh A với B, nếu bằng nhau thì tiếp theo bước 3, không thì tiếp theo bước 4.

3. User được Host xác thực và cấp cho một session_id.

4. Host thông báo lỗi cho User, và yêu cầu làm lại từ bước 1.

 


Protocol này có những vấn đề gì? Mình thử làm xem nha: vấn đề lớn nhất là plaintext password của User bị truyền đi mà không có bất kỳ sự bảo vệ nào. Nhiều bạn sẽ tranh luận là nếu dùng HTTPS thì sẽ không sao, nhưng như mình đã nói ngay từ đầu, giả thuyết đường truyền luôn có người theo dõi là một giả thuyết cần thiết trong môi trường Internet nhiều nguy cơ và phức tạp như bây giờ. Ví dụ như vừa rồi, ở BlackHat có người làm một cái demo ssl-mitm.

Câu hỏi là: sửa protocol của HVAOnline lại thế nào để giải quyết được vấn đề plaintext password này?

Mình thử revise lại một chút, ra một protocol như sau:

Protocol 2 wrote:


1. User gửi ID cho Host.

2. Host lấy từ database ra salt của ID, và gửi lại cho User.

3. User thực hiện A = H(P, salt), rồi gửi A cho Host.

4. Host lấy từ database ra B (cũng là B được tính như ở protocol 1) so sánh A và B, nếu bằng nhau thì tiếp tục bước 5, không bằng thì tiếp tục bước 6.

5. User được Host xác thực và cấp cho một session_id.

6. Host thông báo lỗi cho User, và yêu cầu làm lại từ bước 1.

 


Protocol 2 này giải quyết được (một phần) vấn đề plaintext password được truyền trên đường truyền. Và trên Internet cũng có nhiều website thưc hiện cái protocol 2 này để xác thực người dùng.

Câu hỏi là: protocol 2 này có những vấn đề gì?

Mình cũng đưa ra đây lại protocol mà MrNothing đề xuất:

Protocol 3 wrote:


1. User gửi ID, C1 = E(P, nonce1) cho Host, trong đó P là mật khẩu của User, nonce là unique message number, thường là random, E(K, M) là symmetric cipher nhận key là K và plaintext là M.

2. Host lấy từ database ra P của ID, rồi thực hiện nonce1' = D(P, C1). Host tính C2 = E(P, nonce1'||nonce2||session_key), trong đó || nghĩa là nối vào, nonce2 và session_key được Host tạo ra ngẫu nhiên. Host gửi lại C2 cho User.

3. User thực hiện X = D(P, C2). Căn cứ vào thoả thuận trước về chiều dài của nonce, mà User sẽ cắt ra nonce1' từ X, rồi so sánh nonce1' với nonce1, nếu không bằng nhau, thì nhảy đến bước 6. Nếu bằng nhau, User sẽ cắt nonce2' và session_key' từ X ra, rồi thực hiện C3 = E(session_key', nonce2'). User gửi C3 lại cho Host.

4. Host thực hiện C4 = E(session_key, nonce2), so sánh C4 và C3, nếu không bằng nhau thì nhảy đến bước 6, nếu bằng nhau thì nhảy đến bước 5.

5. User được Host xác thực và cấp cho một session_id.

6. Host thông báo lỗi cho User, và yêu cầu làm lại từ bước 1.

 


Câu hỏi vẫn là: Protocol 3 này có những vấn đề gì?

Mời các bạn phân tích các protocol này cho vui. Hoặc là mô tả protocol mà bạn đang sử dụng để mọi người tham khảo, nhất là các bạn lập trình viên đó.

PS: mặc dù đã có nhiều protocol hay hơn, nhưng mình nghĩ cứ từng bước đã, tìm hiểu những vấn đề của các protocol đang được bạn sử dụng, thì từ đó mới có thể xây dựng các protocl khác an toàn 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 23/04/2009 18:58:16 (+0700) | #2 | 178207
StarGhost
Elite Member

[Minus]    0    [Plus]
Joined: 29/03/2005 20:34:22
Messages: 662
Location: The Queen
Offline
[Profile] [PM]
protocol 2 thực chất chỉ khác protocol 1 ở chỗ hash được tính toán ở đâu, vì vậy nên không khá hơn protocol 1.

protocol 3: có fresh key, secret key, entity authentication (mỗi bên đều khẳng định bên kia đang thực sự tham gia vào protocol), key confirmation (mỗi bên đều khẳng định bên kia biết được shared key), tuy nhiên không có mutual authentication (tức là đảm bảo mỗi bên đều biết bên kia là ai).

Và một điểm quan trọng, cả 2 protocols này không thể áp dụng vào môi trường web được.
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 23/04/2009 21:58:07 (+0700) | #3 | 178221
MrNothing
Member

[Minus]    0    [Plus]
Joined: 04/01/2008 11:05:37
Messages: 76
Offline
[Profile] [PM]
Thanks choc_ smilie

Protocol 3: có ID của người gửi từ đầu rồi mà bác StarGhost. ID+ pass để xác thực người gửi (client). Người nào có đúng pass (server) mới gửi trả lại được nonce1. Nonce 1 xác thực người nhận server, Nonce 2 xác thực client.

Điểm yếu của protocol 3 đó là lộ password nếu password yếu. Có thể bị vét cạn tìm ra pass!

Protocol 2 dùng salt như kiểu challenge theo kiểu one time password.


Tại sao 2 protocols đó không dùng được trong môi trường web. Môi trường đó đòi hỏi gì?




[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 23/04/2009 22:11:40 (+0700) | #4 | 178222
MrNothing
Member

[Minus]    0    [Plus]
Joined: 04/01/2008 11:05:37
Messages: 76
Offline
[Profile] [PM]
Xét protocol 2:

Cơ chế send session ID như thế nào? Bước 5 không clear. Có được mã hóa không.

thử man in the middle cái:

A---> IDA M -----------> IDM Server
A <-----salt A M <---- salt M Server

A-----> hash (PA,salt A) M--> hash (PM, salt M) server.

A <---session ID A-M ---> M M <------sesion ID M-server-----> server.

M có thể giả dạng server nếu như không có cơ chế chống replay attack.
Ví dụ M gửi lại cho A cái salt A cũ. Nên có thêm timestamp.

- Cơ chế gửi hash(PA, salt) cũng gặp lỗi như Protocol 3. Nếu password chọn là weak password, chỉ vài kí tự thì sẽ bị brute force. Nếu quá nhiều kí tự user sẽ ko nhớ nổi.

Challenge kiểu này có thể thực hiện bằng phần mềm chạy trên điện thoại di động sinh ra hash(P, salt) chẳng hạn! Key sẽ được lưu trong điện thoại.


Môi trường web phải chăng bác Starghost muốn nói đến SSL với certificate?
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 23/04/2009 22:28:04 (+0700) | #5 | 178224
mfeng
Researcher

Joined: 29/10/2004 15:16:29
Messages: 243
Offline
[Profile] [PM]
Mục tiêu của quá trình authentication trên là để lấy session_id. Nên nếu 2 protocols trên mà gửi session_id dạng plain-text thì ai kiểm soát đường truyền có thể dùng tiếp session_id này trong khi client chưa logout.

Protocol 2: vẫn bị replay attack.

@starghost: tớ chưa hiểu ở protocol 3 mà không có mutual authentication thì sẽ bị nguy cơ gì? Bên client và server xác lập sự tin cậy dựa trên một share secret (là password). Giả sử rằng password này không để bên thứ ba biết, thì protocol 3 đã đảm bảo an toàn rồi.

PS: Web cũng dùng được chứ nhỉ? Tớ thấy AJAX có thể hỗ trợ cái này đấy chứ ?

[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 23/04/2009 22:50:49 (+0700) | #6 | 178226
mfeng
Researcher

Joined: 29/10/2004 15:16:29
Messages: 243
Offline
[Profile] [PM]
Protocol 3 có vấn đề là phải lưu password plain-text ở phía host. Cái này hơi bị nguy nếu host đổ vỡ.

Protocol tớ dùng như thế này:

Protocol 4.

Code:
Host lưu trong database H_usr = H(P || salt) & salt.


Code:
1. User gửi ID.

2. Host sinh nonce, gửi cho client. nonce || salt.

3. Client gửi lại X = H( H(P || salt) || nonce).

4. Host tính X1 = H(H_usr || nonce) và so sánh với X. Nếu giống nhau tiếp tục bước 5. Nếu sai chuyển sang bước 7.

5. Host gửi cho user một session_id. M = E(H_usr || nonce ,session_id). 

6. User nhận được M, giải mã lấy ra session_id = D( H(P||salt) || nonce, M).

7. Host thông báo lỗi cho usr, yêu cầu làm lại.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 23/04/2009 23:07:37 (+0700) | #7 | 178229
MrNothing
Member

[Minus]    0    [Plus]
Joined: 04/01/2008 11:05:37
Messages: 76
Offline
[Profile] [PM]
Xét protocol 4: lưu dãy H_user+ salt thì có đổ vỡ không? Như nhau thôi. ai có P thì cũng sinh ra được dãy H(P||salt). Ai có H(P||salt) thì cũng xác thực được client.

Nếu password yếu thì nguy cơ bị mất pass là cao. bị Brute Force. password bao nhiêu kí tự thì tạm chấp nhận được?

[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 24/04/2009 00:11:29 (+0700) | #8 | 178235
StarGhost
Elite Member

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

MrNothing wrote:
Protocol 2 dùng salt như kiểu challenge theo kiểu one time password. 

Salt chứ không phải nonce bạn ạ.

mfeng wrote:
@starghost: tớ chưa hiểu ở protocol 3 mà không có mutual authentication thì sẽ bị nguy cơ gì? Bên client và server xác lập sự tin cậy dựa trên một share secret (là password). Giả sử rằng password này không để bên thứ ba biết, thì protocol 3 đã đảm bảo an toàn rồi. 

Về mặt nguyên tắc, nắm được password của user không có nghĩa là chứng minh được đó là cái honest server, vì password là thứ dễ bị externalized nhất. Nói đến mutual authentication thì cách thức duy nhất được chấp nhận hiện nay là dùng public key cryptosystem.

mfeng wrote:
PS: Web cũng dùng được chứ nhỉ? Tớ thấy AJAX có thể hỗ trợ cái này đấy chứ ? 
À cái này thì hiển nhiên, chỉ có điều khó mà standardize được, tức là mỗi website nếu muốn thực hiện thì phải tự implement lấy, chứ không phải như trường hợp của TLS. Còn trong môi trường e-commerce thì hiển nhiên là không chấp nhận được.

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 24/04/2009 00:37:12 (+0700) | #9 | 178237
mfeng
Researcher

Joined: 29/10/2004 15:16:29
Messages: 243
Offline
[Profile] [PM]

MrNothing wrote:

Xét protocol 4: lưu dãy H_user+ salt thì có đổ vỡ không? Như nhau thôi. ai có P thì cũng sinh ra được dãy H(P||salt). Ai có H(P||salt) thì cũng xác thực được client.
 


Khác chứ, người dùng thường có xu hướng dùng chung password cho nhiều hệ thống, một hệ thống để lộ pass của người dùng thì không được ảnh hưởng tới hệ kia smilie

StarGhost wrote:

Về mặt nguyên tắc, nắm được password của user không có nghĩa là chứng minh được đó là cái honest server, vì password là thứ dễ bị externalized nhất. Nói đến mutual authentication thì cách thức duy nhất được chấp nhận hiện nay là dùng public key cryptosystem.
 

Theo tớ thấy thì ngay cả cert dùng pub/privkey cũng có thể bị mất, có điều khó mất hơn password thôi: vì attacker sẽ phải nắm được "cái ta có" (là privkey) và "cái ta biết" (là passphrase).

Tóm lại chúng ta đang thảo luận về xác bằng mật khẩu sao cho an toàn, nghĩa là hệ thống hoạt động dựa trên một điểm tin cậy nào đó (ở đây là mật khẩu). Với pubkey cryptosystem, điểm tin cậy là pub/privkey là câu chuyện khác.

[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 24/04/2009 00:42:48 (+0700) | #10 | 178239
MrNothing
Member

[Minus]    0    [Plus]
Joined: 04/01/2008 11:05:37
Messages: 76
Offline
[Profile] [PM]

StarGhost wrote:

Về mặt nguyên tắc, nắm được password của user không có nghĩa là chứng minh được đó là cái honest server, vì password là thứ dễ bị externalized nhất. Nói đến mutual authentication thì cách thức duy nhất được chấp nhận hiện nay là dùng public key cryptosystem.
 

Public Key thì an toàn hơn là đúng rồi. Ai muốn giả mạo cần có cả Private Key và password để open nó.
+ Làm thế nào để chôm được private key
+ làm thế nào để có password

Chi phí cho public key là khá lớn. Không thể bảo ai cũng kè kè cái usb được! và phiền toái khi sử dụng ở các máy khác nhau. Nếu chỉ dùng trên máy mình thì có thể lưu ở máy.



StarGhost wrote:
À cái này thì hiển nhiên, chỉ có điều khó mà standardize được, tức là mỗi website nếu muốn thực hiện thì phải tự implement lấy, chứ không phải như trường hợp của TLS. Còn trong môi trường e-commerce thì hiển nhiên là không chấp nhận được.
 


Với ecommerce thì giờ em thấy họ có ít nhất 3 thứ:
1. Public key (lưu ở usb)
2. Password
3. One Time Password (Một số dùng một miếng giấy in 35 pass rồi mỗi lần giao dịch nó sẽ hỏi, một số dùng Token của RSA, Entrust, Gemato, một số thì chơi kiểu gửi TAN tới máy di động qua SMS. Có vụ đang thu mua Nokia 1100 của Đức cho để ăn cắp TAN thì phải smilie.

[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 24/04/2009 00:45:05 (+0700) | #11 | 178240
MrNothing
Member

[Minus]    0    [Plus]
Joined: 04/01/2008 11:05:37
Messages: 76
Offline
[Profile] [PM]
@ mfeng: nếu password của bạn 10 kí tự là bị lộ rồi đấy. Không cần tấn công host chỉ cần vét cạn thôi!

salt được gửi lại user ở bước 2 nên có pass hoàn toàn tính được H(P,salt).
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 24/04/2009 00:46:51 (+0700) | #12 | 178241
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]
Nếu ssl-mitm khả thi và dễ dàng xuyên qua wider network (cho cùng một network band giữa client, server và mitm) thì mọi protocol trình bày ở trên còn vững không?

Bởi thế, khái niệm "out-of-band authentication" mới hình thành.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 24/04/2009 01:01:50 (+0700) | #13 | 178244
MrNothing
Member

[Minus]    0    [Plus]
Joined: 04/01/2008 11:05:37
Messages: 76
Offline
[Profile] [PM]
out of band authentication: khi đó thêm 1 số bí mật nữa được truyền bằng con đường khác, email, sms,...

Khi đó muốn giả mạo thì cần tấn công cả 2 kênh truyền.

Em nghĩ là thêm giả thuyết là database của 2 bên không bị tấn công. Password không bị mất theo kiểu camera theo dõi nhập số, key logger,...


Các giao thức nêu trên vẫn lộ pass, nó cho phép attacker có cơ chế để verify pass đúng hay sai bằng các message nó tóm được mà không cần tấn công để lấy password trên host hoặc client. Trừ khi password đủ dài!

choc_ có link của ssl-mitm ko?
hình như đây có:
http://blog.renchap.com/2009/02/20/blackhat-presentation-about-ssl-mitm
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 24/04/2009 01:10:55 (+0700) | #14 | 178249
StarGhost
Elite Member

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

mfeng wrote:

Theo tớ thấy thì ngay cả cert dùng pub/privkey cũng có thể bị mất, có điều khó mất hơn password thôi: vì attacker sẽ phải nắm được "cái ta có" (là privkey) và "cái ta biết" (là passphrase).

Tóm lại chúng ta đang thảo luận về xác bằng mật khẩu sao cho an toàn, nghĩa là hệ thống hoạt động dựa trên một điểm tin cậy nào đó (ở đây là mật khẩu). Với pubkey cryptosystem, điểm tin cậy là pub/privkey là câu chuyện khác.

 

--> Không phải là khó mất hơn, mà là khó mất hơn rất nhiều, vì private key là thứ hầu như không bao giờ bị externalized. Hơn nữa, security assumptions cũng mạnh hơn rất nhiều.

MrNothing wrote:
Với ecommerce thì giờ em thấy họ có ít nhất 3 thứ:
1. Public key (lưu ở usb)
2. Password
3. One Time Password (Một số dùng một miếng giấy in 35 pass rồi mỗi lần giao dịch nó sẽ hỏi, một số dùng Token của RSA, Entrust, Gemato, một số thì chơi kiểu gửi TAN tới máy di động qua SMS. Có vụ đang thu mua Nokia 1100 của Đức cho để ăn cắp TAN thì phải smilie.  

Đấy là user authentication thôi, còn server authentication thì chỉ có PKI vậy.

MrNothing wrote:
@ mfeng: nếu password của bạn 10 kí tự là bị lộ rồi đấy. Không cần tấn công host chỉ cần vét cạn thôi!  
Chà, 10 kí tự mà bạn vét cạn được thì bạn cũng có kha khá resource đấy nhỉ. smilie

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 24/04/2009 01:17:28 (+0700) | #15 | 178251
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

MrNothing wrote:
out of band authentication: khi đó thêm 1 số bí mật nữa được truyền bằng con đường khác, email, sms,...

Khi đó muốn giả mạo thì cần tấn công cả 2 kênh truyền.

Em nghĩ là thêm giả thuyết là database của 2 bên không bị tấn công. Password không bị mất theo kiểu camera theo dõi nhập số, key logger,...


Các giao thức nêu trên vẫn lộ pass, nó cho phép attacker có cơ chế để verify pass đúng hay sai bằng các message nó tóm được mà không cần tấn công để lấy password trên host hoặc client. Trừ khi password đủ dài!

choc_ có link của ssl-mitm ko?
hình như đây có:
http://blog.renchap.com/2009/02/20/blackhat-presentation-about-ssl-mitm 


Giả sử có một super douper computer có thể brute một chuỗi hash trong vòng một thời gian cực ngắn (từ 1 năm xuống còn vài phút - quantum physics) thì mọi biện pháp chống chọi nào không ngăn được mitm thì cũng... hỏng.

Nếu có "out-of-band" factor dính vào thì việc detect cái "out-of-band" ấy không đơn giản và để đạt được mục đích mitm trong cái "out-of-band" ấy sẽ trở nên khó hơn nữa. Nếu "out-of-band" có nhiều factors con nữa thì lại gia tăng mức bảo mật.

Nói tóm lại, mọi sự quy về cái gọi là "cost of implementation" smilie
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 24/04/2009 01:50:47 (+0700) | #16 | 178259
[Avatar]
Z0rr0
Q+WRtaW5pc3RyYXRvc+g

Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
[Profile] [PM] [WWW] [Yahoo!]
Một số ngân hàng trên thế giới áp dụng một ví dụ như tự động gọi điện thoại đến chủ tài khoản xác nhận qua việc đọc lại 1 số đặc biệt nào đấy để thực hiện việc chuyển tiền, chi phí thấp nhưng rất hiệu quả.

Với key dài 10 kí tự thì tổ hợp khoảng trên 100 ngàn tỉ cho giả định key chỉ chứa 26 kí tự alphabet, với sức mạnh của 1 PC thông thường hiện nay attack mất khoảng gần 1 tháng
Hibernating
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 24/04/2009 05:03:15 (+0700) | #17 | 178278
mfeng
Researcher

Joined: 29/10/2004 15:16:29
Messages: 243
Offline
[Profile] [PM]
Topic phát triển nhanh quá! Mới từ xác thực bằng mật khẩu đã chuyển sang public key & out-of-band authentication rồi smilie
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 24/04/2009 05:12:45 (+0700) | #18 | 178279
MrNothing
Member

[Minus]    0    [Plus]
Joined: 04/01/2008 11:05:37
Messages: 76
Offline
[Profile] [PM]
trở lại với password tiếp nhỉ? Có ai đề xuất giao thức nào nữa không ạ?

Giả thiết là không ai tấn công host lấy pass, không key logger, camera ăn trộm pass user. Chỉ sniff đường truyền thôi.

// ngoài lề
Trước em có mail hỏi bọn bán token One Time Password (Như cái thẻ mà chơi chứng khoán FPT ấy-pin chạy 5 năm). 37 usd/ cái (Tạo bởi key 20 bytes+ counter). Nhưng mà mua authentication server cho 10 user giá là 1500 usd.

[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 24/04/2009 06:54:16 (+0700) | #19 | 178296
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

mfeng wrote:
Topic phát triển nhanh quá! Mới từ xác thực bằng mật khẩu đã chuyển sang public key & out-of-band authentication rồi smilie 


Hì hì, vậy tốt chớ sao em smilie . Có những chi tiết có thể tự "khai thác" sau (tài liệu có cả đống mà). Cái chính là đi đến những giải pháp tổng thể sau khi xác định được hạn chế nhất định nào đó.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 24/04/2009 10:59:40 (+0700) | #20 | 178318
MrNothing
Member

[Minus]    0    [Plus]
Joined: 04/01/2008 11:05:37
Messages: 76
Offline
[Profile] [PM]
có giải thuật nào nữa không ạ?


Code:
Protocol 5:

1. Alice tạo cặp khóa Public Key  (PR,PU) . Alice gửi M1=E(pw, PU) tới Bob.
2. Bob giải mã M1. Tạo M2= E(PU,sk||nonce) gửi lại Alice
3. Alice gửi E(sk,nonce) cho Bob.


Chi phí tính toán hơi lớn! Đổi lại là an toàn hơn smilie

Thà chia sẻ xừ Public Key từ đầu cho xong smilie.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 24/04/2009 13:29:47 (+0700) | #21 | 178334
StarGhost
Elite Member

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

MrNothing wrote:
có giải thuật nào nữa không ạ?


Code:
Protocol 5:

1. Alice tạo cặp khóa Public Key  (PR,PU) . Alice gửi M1=E(pw, PU) tới Bob.
2. Bob giải mã M1. Tạo M2= E(PU,sk||nonce) gửi lại Alice
3. Alice gửi E(sk,nonce) cho Bob.


Chi phí tính toán hơi lớn! Đổi lại là an toàn hơn smilie

Thà chia sẻ xừ Public Key từ đầu cho xong smilie


Bạn ơi, public key mà bạn làm như private message thế này thì hỏng bét. Protocol này phải sửa lại thôi.
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 24/04/2009 21:30:14 (+0700) | #22 | 178352
MrNothing
Member

[Minus]    0    [Plus]
Joined: 04/01/2008 11:05:37
Messages: 76
Offline
[Profile] [PM]
protocol 6
Code:
bịa ra giải thuật (custom protocol)

==> chống dịch ngược để lấy giải thuật smilie
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 26/04/2009 23:42:33 (+0700) | #23 | 178573
choc_
Member

[Minus]    0    [Plus]
Joined: 27/01/2009 06:46:01
Messages: 122
Offline
[Profile] [PM]
hơ hơ hay quá. mình bận việc nên không lên HVA mấy ngày không ngờ là có nhiều tranh luận sôi nổi vậy.

nhìn lướt qua một lượt, thấy cái nào cũng có vấn đề hết trơn. mấy hôm nay lúc rảnh, mình ngồi suy nghĩ, thấy có vẻ như thiết kế được một cái protocol như vậy, với yêu cầu là đường truyền luôn có người rình mò theo dõi chỉnh sửa, dường như là bất khả thi hay sao áh.

ví dụ như nếu mình dùng AJAX để thực hiện phía client side cho protocol, thế lỡ attacker nó sửa cái javascript của mình lại, thay vì H(P) rồi mới gửi đi, thì nó cứ gửi P đi luôn. nhưng cứ để xem sao.

giờ đặt cục gạch trước, tí nữa có thời gian mình sẽ thử *đào xới* mấy cái protocol của các bạn xem sao.

[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 27/04/2009 00:42:10 (+0700) | #24 | 178589
MrNothing
Member

[Minus]    0    [Plus]
Joined: 04/01/2008 11:05:37
Messages: 76
Offline
[Profile] [PM]
Chờ choc_ đào xới protocol 5.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 21/05/2009 18:59:04 (+0700) | #25 | 181314
StarGhost
Elite Member

[Minus]    0    [Plus]
Joined: 29/03/2005 20:34:22
Messages: 662
Location: The Queen
Offline
[Profile] [PM]
Lâu rồi không quay lại topic, nay đọc lại thấy comment của mình về protocol 5 có vấn đề, âu cũng vì lúc đó chỉ đọc qua step 1 nên phán bừa.

Sau khi đọc lại toàn bộ protocol, mình xin hỏi bạn MrNothing: ở step 1 không biết key pair được tạo ra như thế nào và có hiệu lực ra sao? Còn nữa, mình tò mò không biết protocol này có phải hoàn toàn do bạn tự nghĩ ra chăng?

p/s: Nếu mình đoán không nhầm về ý tưởng của bạn MrNothing đưa ra thì protocol 5 có một đặc điểm rất hay mà các protocol khác không có được. Tuy nhiên, nếu bạn nào có ý định implement protocol này thì cũng nên tìm hiểu xem tại sao nó lại chưa bao giờ được sử dụng một cách phổ biến.
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 21/05/2009 20:30:16 (+0700) | #26 | 181318
MrNothing
Member

[Minus]    0    [Plus]
Joined: 04/01/2008 11:05:37
Messages: 76
Offline
[Profile] [PM]
Không phải tớ nghĩ ra đâu bạn StarGhost ạ!

Protocol này ra đời đã 17 năm rồi smilie.
Tớ không muốn nêu tên protocol ra vì như vậy sẽ không hay. Cứ để ra ý tưởng thế rồi phân tích vui hơn!

Ở Step 1 bạn StarGhost băn khoăn là làm sao Bob hiểu thông tin gì chứa trong PU. Alice và Bob dùng chung một cơ chế giải thuật đã thông báo từ trước chẳng hạn. Nếu thiết kế PU không tốt thì sẽ lộ pass. Ví dụ không nên gửi E(pw, X,PU) với X là một thông tin mà attacker có thể biết như timestamp, ID của Alice hoặc Bob vì khi đó Attacker có thể vét cạn pw để tìm ra pw.

Mặc định là PU chỉ chứa đúng cái public key. ở đây gọi là public key nghĩa là nó tuân theo cơ chế public key chứ không phải là ai cũng biết để verify password giữa 2 người. Public Key PU chỉ 2 thằng Alice và Bob biết với nhau lúc trao đổi thôi.

Còn câu p/s:
1. ý tưởng hay đó là dùng Public Key để che dấu password. Giải thuật của mfeng với các giải thuật khác như salt là lộ pass.
2. Một suy luận tự nhiên đó là độ bảo mật cao hơn thì chỉ có 2 trường hợp, một là đề xuất ra giải thuật tốt hơn (phát minh mới), hai là độ phức tạp tính toán tăng lên smilie. Ở đây bạn StarGhost nghĩ nó rơi vào trường hợp nào smilie

Còn nếu như nghe lén đường truyền mà không dò ra pass thì vác cái camera, hay keylogger theo dõi xem user nó gõ gì là xong, đỡ phải nghe lén đường truyền.
[Up] [Print Copy]
  [Question]   Re: Các cách xác thực người dùng bằng mật khẩu 21/05/2009 21:25:28 (+0700) | #27 | 181321
StarGhost
Elite Member

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

MrNothing wrote:
Ở Step 1 bạn StarGhost băn khoăn là làm sao Bob hiểu thông tin gì chứa trong PU. Alice và Bob dùng chung một cơ chế giải thuật đã thông báo từ trước chẳng hạn. Nếu thiết kế PU không tốt thì sẽ lộ pass. Ví dụ không nên gửi E(pw, X,PU) với X là một thông tin mà attacker có thể biết như timestamp, ID của Alice hoặc Bob vì khi đó Attacker có thể vét cạn pw để tìm ra pw. 


Hì mình không có hỏi như vậy. Nhưng mà bạn nói protocol ra đời cách đây 17 năm thì mình rõ rồi. Thực ra trong authentication thì độ phức tạp tính toán không phải hoàn toàn là cái gì quá critical, nếu vì mất thêm một chút tính toán mà tăng thêm security thì tội gì không.

Protocol này hay ở chỗ entropy của các messages không phụ thuộc vào password. Thế nên không quan trọng password dài ngắn ra sao, việc bruteforce password là không thể.
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 00:16:02 (+0700) | #28 | 181340
mfeng
Researcher

Joined: 29/10/2004 15:16:29
Messages: 243
Offline
[Profile] [PM]
Ờ, lâu không coi lại, giờ xem protocol 5 thế nào nhé smilie

Code:
Protocol 5:
 
 1. Alice tạo cặp khóa Public Key  (PR,PU) . Alice gửi M1=E(pw, PU) tới Bob.
 2. Bob giải mã M1. Tạo M2= E(PU,sk||nonce) gửi lại Alice
 3. Alice gửi E(sk,nonce) cho Bob.


Mục tiêu của giao thức authentication này diễn ra giữa user và server. Ở đây Alice là user, Bob là server có phải không ?.

Vì có trước giả thiết là:
- Hai đầu cuối (usr & server) là tin cậy, không có khả năng bị compromised.
- Đường truyền bị theo dõi & có khả năng bị replay.
Nêu mọi thảo luận sẽ nằm ở an toàn của thông tin trao đổi trên đường truyền chứ không phải thông tin cần lưu trữ, mặc dù điều này khá quan trọng khi cài đặt một giao thức xác thực.

Câu hỏi:

- Step2: Làm sao Bob giải mã được M1 khi không biết thông điệp M1 được gửi từ Alice1 hay Alice2 ?

- Giao thức trên sinh Pub/Priv key, rồi dùng pre-shared password để gửi Pubkey, sau đó dùng lại PubKey để trao đổi session key. Cách làm trên ưu điểm hơn gì so với dùng luôn password để trao đổi session key?. Và vấn đề gì sẽ xảy ra khi mỗi lần gửi đi các PubKey đều dùng lại một key để mã hóa ?

Nhìn chung protocol 5 có vẻ giống một key exchange protocol hơn là một authentication protocol.

Starghost wrote:

Protocol này hay ở chỗ entropy của các messages không phụ thuộc vào password. Thế nên không quan trọng password dài ngắn ra sao, việc bruteforce password là không thể.
 

Protocol này có sử dụng password làm key để mã hóa PubKey, thức là có phụ thuộc vào password chứ nhỉ smilie. Nếu xét về khả năng bruteforce M1 thì tại sao lại không có ?
[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 00:19:21 (+0700) | #29 | 181342
mrro
Administrator

Joined: 27/12/2001 05:07:00
Messages: 745
Offline
[Profile] [PM]
Cái protocol 5 bị vài vấn đề:

1. cả hai bên phải lưu trữ plaintext-equivalent password. database của server side mà bị xâm nhập thì coi như toàn bộ password của user đi tong.

2. không có tính "forward secrecy". ai mà có được password thì sẽ lấy được hết session key từ trước đến giờ trao đổi giữa client và server.

3. nếu mà chôm được một session key thì cũng có thể dùng session key đó để làm offline dictionary attack để brute force password.

StarGhost có đặt câu hỏi mà mình nghĩ là hay: tại sao các protocol như protocol 5 không được sử dụng trong mainstream software system? Bạn nào biết trả lời mình vớ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 00:27:54 (+0700) | #30 | 181346
mrro
Administrator

Joined: 27/12/2001 05:07:00
Messages: 745
Offline
[Profile] [PM]
Àh mình vừa nhớ ra là có người hỏi và trả lời câu hỏi của StarGhost rồi. Xem ở đây: http://article.gmane.org/gmane.comp.encryption.general/12995

Ý của Steven M. Bellovin (tác giả của cái protocol 5 nếu mình không lầm smilie) là các protocol dạng này chẳng giải quyết được vấn đề của Internet hiện tại. Dù có dùng strong protocol cỡ nào mà user bị phising hay keylogger thì cũng chế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]
[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|