Ghi chép về mã hóa (sửa, bổ xung)

Ghi chép về mã hóa.

(Mọi bản ghi chép công bố trên blog này đều là ghi chép cá nhân nhặt nhạnh trên Internet để tìm hiểu sâu hơn đôi chút một vấn đề. Thông tin trong đó có thể sai theo hiểu biết hạn chế của tác giả.)

Mã hóa là gì

Xét ví dụ một bảng mã hóa (mật mã) đơn giản, các chữ cái chuyển thành một cặp số cột – hàng:

1

2

3

4

5

1

A

B

C

D

E

2

F

G

H

I/J

K

3

L

M

N

O

P

4

Q

R

S

T

U

5

V

W

X

Y

Z

Theo bảng này, từ “TAN CONG” sẽ được mã hóa (encryption) là: 44 11 33 31 43 33 22. Dãy số này được gọi là mật mã của từ TAN CONG.

Người không có bảng mã trên, đọc hàng số đó sẽ không hiểu gì. Người có bảng mã sẽ giải mã (decryption) được hàng số đó thành từ “tan cong”. Bảng mã nói trên là một dạng thuật toán mã hóa.

Mã hóa là việc dùng một thuật toán mã hóa và một hoặc nhiều khóa mã biến đổi thông tin có nghĩa (plaintext – văn bản) thành chuỗi ký tự vô nghĩa (ciphertext – mật mã). Chỉ những người biết thuật toán và có khóa mã mới giải mã thông tin đã mã hóa thành thông tin có nghĩa.

Hệ thống mã hóa: gồm thuật toán (hàm toán học) để mã hóa, các khóa mã và các thủ tục (protocol) để thực hiện quá trình mã hóa.

Mã hóa “mạnh” và “yếu”: mã hóa được chia thành 2 loại. Mã hóa yếu chỉ có mục đích hạn chế người bình thường không đọc được nội dung, mã hóa mạnh thì ngay cả các siêu máy tính có thể phải mất hàng chục năm hay lâu hơn mới phá mã được nếu không có khóa mã.

Mã hóa dùng một khóa mã bí mật (symmetric key technique)

Trong kỹ thuật mã hóa này, người gửi và người nhận thông tin có cùng một khóa mã duy nhất. Người gửi dùng khóa mã, mã hóa thông tin rồi gửi đi. Người nhận dùng cũng khóa mã đó để giải mã thông tin và đọc.

Vì chỉ có một khóa mã và dùng chung nên kỹ thuật mã này còn có nhiều tên khác nhau như : symmetric-key, secret-key, single-key, shared-key, one-key, và private-key. Dưới đây ta sẽ gọi là khóa chung.

Hình 2.1: Mã hóa dùng một khóa mã bí mật

Loại khóa này tương tự như những khóa thông thường chỉ có một chìa. Chỉ có thể đóng, mở khóa bằng những chìa giống hệt nhau.

Chuẩn mã hóa quốc gia đầu tiên của Mỹ (và cũng được sử dụng rộng rãi trên toàn thế giới) là DES (Data Encryption Standard) dùng khóa mã đối xứng dài 56 bit. Sau khi được công bố năm 1976, đến năm 1999 mật mã này bị phá trong 22 giờ 15 phút, dùng cách vét cạn (brute force): dò thử tất cả 70,000,000,000,000,000 tổ hợp ký tự của khóa 56 bit.

Về nguyên tắc để dò một số lượng lớn khóa mã như vậy phải có một siêu máy tính cực nhanh. Tuy nhiên năm 1997, dự án DESCHALL Project dùng thời gian rỗi của hàng nghìn máy tính trên Internet đã phá được DES, dành giải thưởng $10,000 của RSA Security .

Hiện nay, DES được coi là không đủ an toàn và thay bằng AES (Advanced Encryption Standard) công bố năm 2002 với khóa mã dài 128, 192 hoặc 256 bit. Ngoài ra còn các chuẩn mã hóa một khóa khác như Twofish, Serpent, AES (Rijndael), Blowfish, CAST5, RC4, TDES, IDEA.

Ưu nhược điểm: nhanh, rất phù hợp nếu thông tin mã hóa không phải chuyển đi đâu (chỉ dùng cho một người).

Nếu thông tin mã hóa phải chuyển qua mạng cho một người thứ hai đọc, nhất là trên khoảng cách xa, khó khăn chính là phải chuyển được khóa mã cho người nhận một cách bí mật (phân phối khóa). Nếu trong quá trình chuyển khóa mã, một bên thứ ba có thể sao chép được khóa mã đó thì họ cũng có thể chặn bắt thông tin đã mã hóa và dùng khóa mã giải mã dễ dàng.

Mã hóa dùng hai khóa mã: khóa mã công khai và khóa mã bí mật. (asymmetric key techniques)

Để tránh được nhược điểm về phân phối khóa nói trên người ta dùng phương thức mã hóa có hai khóa mã (còn gọi là mã hóa không đối xứng – asymmetric key techniques) mới xuất hiện năm 1975.

Loại mã hóa này có hai khóa mã: một khóa mã công khai (public key) dùng để mã hóa và một khóa bí mật (private key) dùng giải mã.

Xét ví dụ tương tự: A định gửi một bức thư mật cho B. Các bước tiến hành như sau:

  • A yêu cầu B gửi chìa khóa công khai của B đến cho A. Vì là chìa công khai nên B có thể gửi qua bưu điện, nhờ người khác, thậm chí treo ở một nơi công cộng v.v… mà không cần giữ bí mật.

  • A viết thư, bỏ vào một cái hòm có hai chìa khóa khác nhau. Chìa công khai của B được dùng để khóa hòm đó lại rồi hòm được gửi qua bưu điện.

  • Chìa công khai của B, ai cũng có thể có một bản sao nhưng chìa công khai chỉ dùng để khóa, không dùng mở được. Do đó trên đường vận chuyển, người thứ ba không mở được.

  • B nhận được hòm, dùng chìa khóa bí mật của B để mở hòm. Khi đã khóa bằng chìa công khai của B thì chỉ có thể mở được bằng chìa bí mật của B, người khác không có chìa bí mật này không thể mở được.

Hình 3.1: Mã hóa dùng khóa công khai và khóa bí mật

Điểm hay của cách làm này là cái khóa mã công khai không cần dấu diếm. Cách làm tương tự khi muốn nhận email bí mật như sau:

  • B dùng phần mềm tạo ra một bộ khóa mã riêng cho mình gồm một khóa công khai (public key) và một khóa bí mật (private key). Bộ khóa mã này gắn liền với một địa chỉ email của B.

  • Khóa bí mật được cất giữ cẩn thận trên máy tính của B. Khóa công khai có thể gửi kèm theo email cho A hoặc gửi vào một máy chủ công cộng trên Internet kèm theo địa chỉ email, bất kỳ ai muốn gửi mật thư cho B đều có thể vào máy chủ đó tải bản sao khóa công khai của B về.

  • Người gửi (A) soạn thư, dùng khóa mã công khai của B để mã hóa bức thư đó rồi gửi cho B. Trên đường truyền dù có ai chặn xem thư cũng không thể đọc được vì thư đã bị mã hóa, không có khóa bí mật không giải mã được.

  • Khi thư đến máy tính của người nhận (B), người nhận dùng khóa mã bí mật và phần mềm giải mã để giải mã bức thư.

Cách mã hóa này có hai ưu điểm:

  • Hai người trao đổi thông tin mật cho nhau không cần có thỏa thuận trước. Nếu một người có địa chỉ email kèm một khóa công khai gửi trên một máy chủ Internet, bất kỳ người nào nếu cần đều có thể tải khóa công khai đó về tạo một mật thư gửi cho địa chỉ email đó, không cần quen biết, thỏa thuận gì trước.

  • Không cần có một phương thức phân phối khóa mã tin cậy và bí mật. Để đàm bảo bí mật, khóa mã kiểu gì cũng phải định kỳ thay đổi. Trước đây, dùng hệ thống mã hóa một khóa, các ngân hàng, bộ ngoại giao phải cử người đi khắp thế giới để giao khóa mã mới rất mất thì giờ và tốn kém.

Thuật toán mã hóa hai khóa phổ biến hiện nay là RSA.

Hàm băm mật mã (Cryptographic Hash function – CHF)

Khái niệm hàm băm (hash function) khác với khái niệm hàm băm mật mã (cryptographic hash function). Dưới đây ta chỉ xét khái niệm thứ hai và gọi tắt là hàm băm.

Định nghĩa: CHF là một thuật toán xác định, áp dụng vào một khối dữ liệu có chiều dài bất kỳ để tính ra được một một chuỗi bit có chiều dài cố định (128 bits,256 bits, …) gọi là trị số băm (hash value) sao cho khi dữ liệu thay đổi dù chỉ một bit thì khi tính lại trị số băm sẽ thay đổi và do đó, mỗi khối dữ liệu sẽ có một trị số băm duy nhất.

Hiểu nôm na, một khối dữ liệu có một trị số băm duy nhất tương tự như số chứng minh với một người. Điểm khác biệt là khi người đó chỉ rụng một sợi tóc thì khi tính lại trị số băm cũng thay đổi.

Tại sao lại dùng từ “băm”: để tính trị số băm, thường dữ liệu được chia nhỏ (băm) ra thành nhiều phần rồi áp dụng một thuật toán tính nào đó.

Một hàm băm lý tưởng sẽ có các tính chất sau:

  • Dễ dàng tính trị số băm với bất kỳ khối dữ liệu nào.

  • Từ trị số băm không thể tính ngược ra khối dữ liệu (hàm một chiều).

  • Không thể thay đổi khối dữ liệu (dù chỉ một bit) mà không làm thay đổi trị số băm.

  • Không thể có hai khối dữ liệu khác nhau mà có cùng một trị số băm.

Dùng làm gì:

  • Xác nhận tính toàn vẹn của dữ liệu sau khi truyền qua mạng: các file cài đặt một bản Linux (iso) được đặt trên Internet kèm theo trị số băm md5. Sau khi tải file về, tính lại md5 của file đã tải, nếu giống với trị số đã cho trước tức là file tải về nguyên vẹn, giống hoàn toàn như file đặt trên Internet, không bị lỗi (thiếu, sai) khi download. Một email, một file được gửi qua mạng cùng với trị số băm ban đầu của nó để người nhận kiểm tra tương tự.

  • Dùng trong chữ ký số (xem phần dưới)

  • Kiểm tra password: một phần mềm tạo ra password rồi lưu giữ không phải dưới dạng nguyên bản đọc được mà dưới dạng trị số băm của password đó (để tránh bị hacker xâm nhập lấy cắp). Khi user khai password, password đó được tính trị số băm và so sánh với trị số đã lưu.

  • ….

Hai hàm băm hiện được dùng rộng rãi là MD5 và SHA-1. SHA-1 là chuẩn của Mỹ và được xem như an toàn hơn MD5.

Chữ ký số (digital signatures)

Một chữ ký số đặt vào một văn bản điện tử cũng có công dụng tương tự như một chữ ký tay vào văn bản giấy:

  • Nó xác nhận rằng văn bản đúng là do người ký phát hành.

  • Người đã ký cũng không thể phủ nhận là mình không phát hành văn bản đó vì chỉ người đó mới có chữ ký số đó. Chữ ký tay có thể bắt chước giả mạo được, nhưng chữ ký số thì không. Cũng không thể tách chữ ký số ra khỏi một văn bản và gán nó vào văn bản khác.

  • Chữ ký số còn một công dụng nữa mà chữ ký tay không có là nó xác thực văn bản gốc vẫn nguyên vẹn không bị sửa đổi trên đường truyền. Văn bản giấy mà bị cạo sửa tinh vi thì chắc phải dùng máy móc chuyên dụng mới phát hiện được.

Hình 5.1: Chữ ký số

Quá trình tạo và kiểm tra chữ ký số cũng dùng kỹ thuật mã hóa hai khóa nhưng ngược với cách mã hóa đã nói ở trên, gồm 3 thuật toán:

  • Một thuật toán tạo khóa tạo ra một cặp khóa bí mật và công khai theo các số ngẫu nhiên như đã mô tả ở trên.

  • Một thuật toán tạo chữ ký số: từ một văn bản và một khóa bí mật tạo ra một chữ ký số và chèn nó vào văn bản. Văn bản trở thành văn bản đã ký. Trong hình bên trái của Hình 5.1, trị số băm của văn bản được tính sau đó mã hóa bằng khóa bí mật của người ký tạo thành chữ ký số của người đó. Nếu dùng dịch vụ chữ ký số của một nhà cung cấp thì có kèm theo một giấy chứng nhận (certificate) của nhà cung cấp đó. Tất cả được chèn vào văn bản tạo thành văn bản đã ký (Digital signed data)

  • Một thuật toán kiểm tra dùng văn bản đã ký, khóa công khai của người ký để xác thực chữ ký đúng là của người ký. Trong hình bên phải của Hình 5.1, từ văn bản đã ký tách riêng phần văn bản và chữ ký. Sau đó tính trị số băm của văn bản, dùng khóa công khai của người ký để giải mã chữ ký số và tách ra trị số băm gốc đã kèm trong chữ ký đó ở bước trên. Nếu hai trị số băm trùng nhau thì chữ ký đúng. (và văn bản đúng nguyên bản gốc không bị thay đổi trên đường truyền).

Hai hệ thống chữ ký số phổ biến hiện nay là RSADSA.


PGP – một hệ thống mã hóa hỗn hợp.

PGP (Pretty Good Privacy) là một hệ thống mã hóa hỗn hợp, kết hợp những ưu điểm của hai hệ thống mã hóa một khóa và hai khóa nêu trên, do Phillip Zimmermann sáng tạo ra năm 1991.

Các bước phần mềm PGP thực hiện:

  • Nén dữ liệu chưa mã hóa lại. Việc nén này làm giảm thời gian truyền qua mạng và tiết kiệm ổ cứng nhưng tác dụng chính là tăng cường an ninh. Phần lớn các kỹ thuật phá mã (cryptanalysis) tìm kiếm các mẫu ký tự giống nhau trong dữ liệu đã mã hóa để dò ra khóa mã. Khi nén, số các mẫu giống nhau đó giảm xuống tối thiểu, sẽ khó dò hơn rất nhiều.

  • Tạo khóa mã bí mật dùng một lần (session key). Khóa mã này là một số ngẫu nhiên được tạo ra dựa trên chuyển động ngẫu nhiên của chuột và các phím ngẫu nhiên đã gõ. (TrueCryp dùng cách tạo khóa này, nhưng không phải dùng một lần, xem ở đây).

  • Mã hóa dữ liệu đã nén: Dùng khóa mã vừa tạo và một thuật toán mã hóa một khóa nhanh và tin cậy để mã hóa dữ liệu đã nén. Kết quả là dữ liệu được mã hóa (từ plaintext thành cyphertext). Để giải mã cũng vẫn dùng session key. Hai bước 2,3 dữ liệu được mã hóa bằng kỹ thuật mã hóa một khóa bí mật đã nói ở trên.

  • Mã hóa khóa mã session key: dùng khóa công khai của người nhận (public key) để mã hóa khóa bí mật dùng một lần (session key). Kết quả có được session key đã mã hóa.

  • Gửi dữ liệu đến người nhận: Gửi đồng thời cả dữ liệu đã mã hóa (cyphertext) và session key đã mã hóa cho người nhận.

  • Người nhận giải mã theo ba bước: dùng private key của mình để giải mã session key. Khi đã có session key, dùng nó để giải mã dữ liệu. Sau đó dữ liệu được giải nén để có thể đọc được. Ba bước đó phần mềm PGP tự làm. Như vậy trong các bước 4,5,6 session key được mã hóa dùng kỹ thuật mã hóa hai khóa.

Hình 6.1: PGP mã hóa và gửi đi ở máy tính người gửi

Hình 6.2: PGP giải mã trên máy tính người nhận

Trên đường truyền, người thứ ba có thể chặn, sao chép được dữ liệu đã mã hóa và session key đã mã hóa. Tuy nhiên, muốn giải mã được dữ liệu phải giải mã được session key, mà session key chỉ giải mã được bằng private key lưu ở máy tính người nhận. Session key lại là số ngẫu nhiên và quá lớn nên không thể dò bằng cách vét cạn các tổ hợp ký tự được.

Năm 1997, PGP trở thành chuẩn gọi là OpenPGP. Hầu hết các chương trình email hiện nay đều hỗ trợ chuẩn này.

Tổ chức Phần mềm Tự do (Free Software Foundation) đã xây dựng một phần mềm tự do, nguồn mở tương thích với OpenGPG gọi là GNU Privacy Guard (viết tắt GnuPG hoặc GPG) và một số phần mềm đồ họa dùng thư viện GnuGPG để mã hóa, giải mã và ký số ( KGPG, Seahorse, MacGPG).

Chứng chỉ số (public key certificate, digital certificate, security certificate hoặc identity certificate)

Nếu hai người đã biết nhau thì khi trao đổi thư mật mã chỉ cần gửi cho nhau khóa mã công khai là đủ.

Nhưng khi liên lạc với một người, một tổ chức mà mình không biết thì cần phải có một bên thứ ba tin cậy xác nhận đó đúng là người, tổ chức như họ đã xưng danh.

Cũng tương tự như khi gặp nhau bình thường thì danh thiếp là đủ, nhưng giao dịch ngân hàng thì phải đưa chứng minh thư (do công an cấp và xác nhận).

Chứng chỉ số là một file trong đó có:

  • Serial Number: số xác định duy nhất cho chứng chỉ.

  • Subject: tên người, tổ chức, thực thể (một địa chỉ email?) được cấp chứng chỉ.

  • Signature Algorithm: thuật toán để tạo chữ ký.

  • Issuer: tổ chức (công ty) cấp chứng chỉ (sau khi đã kiểm tra thông tin về đối tượng được cấp).

  • Valid-From: Ngày có hiệu lực của chứng chỉ.

  • Valid-To: Ngày hết hạn chứng chỉ.

  • Key-Usage: mục đích sử dụng mã khóa công khai (ví dụ để mã hóa hay để ký).

  • Public Key: mã khóa công khai của đối tượng được cấp chứng chỉ.

  • Thumbprint Algorithm: thuật toán dùng tạo trị số băm cho chứng chỉ.

  • Thumbprint: chữ ký số của tổ chức cấp chứng chỉ để kiểm tra, xác nhận rằng chứng chỉ đúng là do tổ chức đó cấp và không bị thay đổi.

Hình dưới đây là chứng chỉ số của site mail.google.com do công ty Thawte cấp:

Như vậy, chứng chỉ số giống chứng minh thư: có tên người được cấp và các thông tin về người đó cùng với tên, chữ ký, dấu của cơ quan cấp (công an). Tất cả những cái đó dùng để xác thực đối tượng được cấp chứng minh thư.

Điểm khác với chứng minh thư là người (hoặc phần mềm) nhận chứng chỉ số của một người khác phải:

  • Kiểm tra chữ ký số của cơ quan cấp xem có đúng là do cơ quan đó cấp không.

  • Kiểm tra trị số băm của chứng chỉ xem chứng chỉ có bị thay đổi không.

  • Kiểm tra xem chứng chỉ còn hạn sử dụng không (cái này giống CMT).

  • Dùng khóa công khai của người có chứng chỉ để tạo văn bản mật gửi cho họ (nếu cần).

Tất cả những việc trên do phần mềm làm và làm rất nhanh.

Như vậy một chứng chỉ số = chứng minh thư + 1 chìa khóa.

Hai cách cấp chứng chỉ số:

  • Chứng chỉ do một cơ quan, công ty chuyên môn, có uy tín về cấp chứng chỉ số (Thawte, Verisign, …) cấp. Mỗi chứng chỉ chỉ có một chữ ký xác nhận duy nhất của cơ quan cấp chứng chỉ (hoặc cấp dưới được ủy quyền của họ). Cách này có tên là public key infrastructure (PKI) theo chuẩn X.509. Chứng chỉ số có thể cấp có phí hoặc miễn phí.

  • Chứng chỉ do nhiều người khác đã từng giao dịch với người có chứng chỉ đó ký xác nhận. Cách này gọi là web of trust (mạng lưới tin cậy) dựa trên hệ thống mã hóa PGP, GPG hoặc các hệ thống khác dùng chuẩn OpenPGP.


Kênh thông tin an toàn trên Internet

Khi dùng Internet, máy tính người dùng thiết lập một kênh trao đổi thông tin với một đối tác liên lạc: một địa chỉ web, một địa chỉ email, một máy fax Internet, một nickname chat, một username để nói chuyện qua VoIP v.v…

Khi đó xuất hiện hai vấn đề liên quan đến an ninh, bảo mật:

  • Đối tác liên lạc có đúng là người mà ta định liên lạc không?

  • Quá trình trao đổi thông tin có bị “nghe trộm” không?

Giao thức xác thực và mã hóa SSL (Secure Socket Layer) thế hệ sau của nó là TLS (Transport Layer Security) giải quyết hai vấn đề trên.

Hoạt động như sau (giả sử liên lạc với công ty ZXC có domain zxc.com):

Kết nối qua cổng dành riêng: Phần mềm máy trạm (trình duyệt web, trình thư điện tử, …) kết nối với phần mềm máy chủ tương ứng (web server, mail server, …) qua cổng dành riêng cho giao dịch an toàn. Ví dụ: cổng duyệt web thường là 80 (giao thức http), cổng dành riêng là 443 (giao thức https), cổng nhận thư POP thường là 110 (giao thức POP3), cổng dành riêng là 995 (giao thức POP3S), v.v…

Thống nhất bộ mã hóa: Phần mềm máy trạm cũng gửi tới máy chủ một danh sách các bộ mã hóa mà nó hỗ trợ. Phần mềm máy chủ chọn một bộ mã hóa mạnh nhất mà nó cũng hỗ trợ, thông báo cho máy trạm biết để thống nhất dùng trong phiên liên lạc đó.

Xác thực đối tác liên lạc: Máy chủ sẽ gửi chứng chỉ số của công ty ZXC (trong đó có khóa mã công khai của công ty) về cho máy trạm.

Kiểm tra chứng chỉ số:

  • Nếu chứng chỉ do một công ty cấp chứng chỉ số (ví dụ Thawte) cấp, nó được mã hóa bằng khóa bí mật của Thawte. Phần mềm máy trạm dùng khóa công khai của Thawte để giải mã được thì chứng tỏ chứng chỉ đó đúng do Thawte cấp. Sau đó có thể vào site của Thawte để kiểm tra xem trong danh sách công ty có công ty ZXC không.

  • Nếu các thông tin khác (thời hạn hiệu lực của chứng chỉ, địa chỉ domain, …) đều hợp lệ thì phiên liên lạc sẽ tiếp tục. Đến đây, vấn đề 1 nói trên được giải quyết, người dùng biết chắc là đang giao dịch với máy chủ của công ty ZXC.

Tạo khóa mã chung: máy trạm dựa trên một số ngẫu nhiên tạo một khóa mã chung, mã hóa nó bằng khóa mã công khai của máy chủ và gửi cho máy chủ. Khóa này chỉ dùng trong một phiên kết nối, đến phiên sau lại tạo khóa khác, vì vậy nó còn được gọi là session key.

Máy chủ dùng khóa mã bí mật của nó giải mã khóa mã chung nói trên. Từ thời điểm đó, mọi thông tin trao đổi giữa máy trạm và máy chủ được mã hóa bằng khóa mã chung đó, tức là dùng kỹ thuật mã hóa một khóa. Thông tin đã được mã hóa bằng một khóa mã chỉ có máy trạm và máy chủ biết vì vậy không thể bị đọc trộm trên đường truyền. Vấn đề 2 nói trên được giải quyết.

Như vậy giao thức SSL và TLS giải quyết hai vấn đề: nó xác thực đối tác liên lạc và mã hóa thông tin trao đổi. Về mặt an ninh, hai giao thức này tương đương nhau (xem thêm).

Hầu hết các dịch vụ Internet đều có thể dùng SSL/TLS: truy cập web đến các site webmail hoặc ngân hàng, mua bán trên mạng (HTTPS), gửi nhận email (POPS, IMAPS, SMTPS), v.v…

Điều kiện để dùng được kênh an toàn là máy chủ phải được cài đặt để hỗ trợ kênh đó ở dịch vụ cần thiết và phải có chứng chỉ số hợp lệ.

Truy cập web an toàn.

Đây là trường hợp riêng của kênh thông tin Internet an toàn đã nói ở trên. Kênh mở trang web an toàn dùng giao thức HTTPS (Hypertext Transfer Protocol Secure) là kết hợp của giao thức mở trang web thông thường HTTP (HyperText Transfer Protocol) và giao thức xác thực, mã hóa SSL/TLS.

Khi vào trang web bằng kênh thông thường ta gõ: http://www.zxc.com

Khi vào trang web bằng kênh an toàn: https://www.zxc.com

Việc đầu tiên, trang web sẽ gửi chứng chỉ số của nó (security certificate) để trình duyệt kiểm tra.

Nếu chứng chỉ do một cơ quan cấp tin cậy mà trình duyệt biết (Thawte, Verisign, …) và các mục khác trong chứng chỉ đều hợp lệ thì kết nối an toàn được thiết lập và trang web sẽ được tải về xuất hiện trong trình duyệt.

Nếu chứng chỉ không hợp lệ (invalid): cơ quan cấp vô danh, sai tên đối tượng (chứng chỉ cấp cho www.zxa.com), hết hạn, … trình duyệt (Firefox) sẽ cho xuất hiện thông báo kiểu như sau:

Trong ví dụ trên, trình duyệt không biết (unknown) cơ quan cấp (issuer) chứng chỉ nên chứng chỉ bị coi là không hợp lệ (invalid).

Khi mở một trang web trong máy chủ của mạng LAN, chứng chỉ do máy chủ cấp chứng chỉ của công ty bạn cấp thì thường gặp thông báo trên. Nhưng vì ta biết chứng chỉ đó hợp lệ nên có thể nhấn vào dòng Or you can add an exception (bạn có thể bổ xung một ngoại lệ) để bảo trình duyệt chấp nhận chứng chỉ đó.

Khi việc xác thực đối tác liên lạc bằng trang web đã xong (chứng chỉ được xác nhận là hợp lệ), kênh kết nối an toàn giữa trình duyệt và máy chủ web được thiết lập. Mọi dữ liệu truyền qua lại trên kênh đó đều được mã hóa: trang web được mã hóa truyền xuống trình duyệt, trình duyệt giải mã và cho hiển thị; username, password và nội dung soạn thảo (email chẳng hạn) do bạn gõ vào đều được trình duyệt mã hóa trước khi chuyển cho máy chủ web. Nếu có người “xem trộm” chặn sao chép các thông tin đó trên đường truyền thì cũng không thể đọc được trừ khi phá được mật mã.

Trong Firefox, khi đã mở một trang web bằng kênh an toàn, vd: https://mail.google.com, nhấn chuột vào biểu tượng ở bên trái thanh địa chỉ ta sẽ có màn hình thông tin sau:

Mục đầu cho biết bạn đang kết nối với đúng google.com mà không phải một site mạo danh nào khác. Mục thứ hai cho biết chủ nhân của google.com là không rõ (unknown) vì khi xin cấp chứng chỉ, công ty Google không khai mục này, lẽ ra nó phải là Google Inc. Mục thứ ba cho biết việc xác nhận ở mục đầu do công ty Thawte thực hiện. Mục cuối cùng thông báo kết nối được mã hóa để tránh xem trộm trên đường truyền.

Nhấn vào More Information còn nhiều thông tin khác.

Cần nhấn mạnh là kết nối bằng kênh an toàn chỉ đảm bảo hai điều: đến đúng địa chỉ và dữ liệu truyền trên kênh được mã hóa ngăn xem trộm trên đường truyền. Password Gmail của bạn vẫn có thể bị lấy trộm bởi một mallware keylogger, bị đọc trộm nếu lưu bất cẩn trong cache trình duyệt, v.v… Tóm lại vấn đề an ninh trình duyệt còn rộng lớn hơn rất nhiều.

Không phải website nào cũng truy cập được bằng https. Thường chỉ những site có trao đổi thông tin cá nhân (webmail) hoặc nhạy cảm (mua bán, ngân hàng) mới hỗ trợ chế độ này.

Gửi nhận email an toàn

Cái này để dành một bài khác.

Phá mật mã

Ngành mật mã học có hai nhánh: cryptographic chuyên nghiên cứu cách mã hóa, giải mã và cryptanalysis chuyên nghiên cứu cách phá mã khi không biết khóa mã và thuật toán mã.

Một trong những cách phá mã đơn giản nhất là dò khóa mã (brute force) bằng cách thử tất cả các tổ hợp ký tự có thể (vét cạn). Với một khóa mã 128 bit, số khóa có thể là 2128 xấp xỉ bằng 3×1038 (38 số không). Nếu một máy tính có khả năng kiểm tra được 1018 khóa trong một giây thì cũng phải mất 1013 năm (gấp một nghìn lần tuổi vũ trụ!). Đấy là lý thuyết.

Thực tế nếu password của bạn chỉ gồm toàn chữ cái, lại ngắn, trùng với tên, ngày sinh của vợ, v.v… thì việc dò nhanh hơn nhiều. Một số site sau khi nhập ba lần mật khẩu không đúng, không cho nhập nữa là để tránh những phần mềm dò mật khẩu tự động. Một số địa chỉ email bắt buộc phải có cả chữ và số là để tránh dò địa chỉ gửi thư rác.

Ngoài cách trên còn hàng chục cách khác cùng với phần mềm, máy tính để phá mã!

Bản thân các thuật toán, phần mềm mã hóa cũng có thể có các điểm yếu, lỗ hổng an ninh bị khai thác để phá mã. Tháng 8/2009, một lỗ hổng an ninh đã được phát hiện ra trong giao thức SSLv3 và TLS.

Về nguyên tắc cái gì do con người tạo ra thì con người cũng có thể tìm cách phá được. Cũng như virus và các vấn đề an ninh khác, đây là cuộc rượt đuổi bất tận giữa bên xây và bên phá không bao giờ kết thúc.

Tuy nhiên, chúng ta sống bằng niềm tin vào “an ninh tương đối”. Hệ thống cửa và khóa cửa nhà bạn “chẳng là cái đinh gì” đối với những tay trộm cao thủ. Nhưng chẳng ai vì thế mất ăn mất ngủ gia cường ba bốn lớp cửa với hàng chục cái khóa. Đơn giản là vì sác suất trộm viếng nhà bạn không cao và những tay cao thủ thì nhằm vào nhà các đại gia hoặc ngân hàng hiệu quả hơn!

One thought on “Ghi chép về mã hóa (sửa, bổ xung)

  1. Pingback: Ghi chép: Các kỹ thuật duyệt web an toàn « ZXC232-Phần mềm nguồn mở – Linux

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s