Tham dự Tech Lounge

Tham dự Tech Lounge


Tìm hiểu về mã hóa theo kiểu bình dân!

Duy Luân
1/12/2015 9:11Phản hồi: 109
Tìm hiểu về mã hóa theo kiểu bình dân!
Trong bài này xin giới thiệu với anh em định nghĩa về mã hóa, một thứ mà chúng ta rất thường hay thấy trong thế giới công nghệ ngày nay. Mã hóa chủ yếu là để dữ liệu của chúng ta trở nên an toàn hơn, tránh sự soi mói tò mò của những kẻ không phận sự. Mình cũng chia sẻ về 4 kĩ thuật mã hóa thường được sử dụng ngày nay, và cuối cùng là nói đến ứng dụng của mã hóa trong đời sống thực tế.

Mã hóa là gì?


Trong ngành mật mã học, mã hóa là một quá trình dùng để biến thông tin từ dạng này sang dạng khác và ngăn những người không phận sự tiếp cận vào thông tin đó. Bản thân việc mã hóa sẽ không làm ngăn chặn việc đánh cắp thông tin, có điều thông tin bị đánh cắp xong thì cũng không xài được, không đọc được hay hiểu được vì nó đã được làm cho biến dạng đi rồi.

Ví dụ đơn giản như thế này: bạn có thư tỏ tình muốn gửi cho cô đồng nghiệp ngồi ở phòng bên, nhưng ngặt cái phòng bên có rất nhiều người nhiều chuyện có thể nhìn thấy bức thư đó trước cả cô gái bạn thích. Ngay cả khi bạn đã giao thư tận tay cho cô ấy rồi thì vẫn có khả năng những người kia sẽ bới móc lại bức thư ra mà đọc. Chính vì thế, để việc tỏ tình diễn ra an toàn và bí mật, bạn mã hóa bức thư tỏ tình theo cách mà chỉ bạn và cô gái kia hiểu, những người khác nhìn vào chỉ thấy một đống kí tự loằng ngoằn rối rắm.

650x300xlock.jpg.pagespeed.ic.pNLaTTb6C0.jpg

Mã hóa sẽ mang lại tính an toàn cao hơn cho thông tin, đặc biệt là trong thời đại Internet ngày nay khi mà thông tin phải đi qua nhiều trạm trung chuyển trước khi đến được đích. Nếu không mã hóa, có khả năng thông tin của bạn sẽ bị ai đó xem trộm trong quá trình truyền tải rồi lợi dụng để làm việc xấu. Thử nghĩ đến việc bạn đang gửi tài liệu mật cho đồng nghiệp ở một thành phố khác, nếu bạn không mã hóa tài liệu đó thì có thể đối thủ cạnh tranh sẽ thấy được kế hoạch kinh doanh bí mật của công ty bạn và làm bạn mất đi doanh thu, thị trường.

Về lý thuyết, bất kì thông điệp mã hóa nào cũng có thể bị giải mã mà không cần biết về thuật toán hoặc các khóa mã hóa (sẽ nói thêm ở bên dưới), vấn đề là mất bao lâu và nguồn lực tính toán cần thiết là như thế nào. Có những lúc để giải mã một tài liệu phải cần đến cả một cái siêu máy tính chạy liên tục 24 giờ mỗi ngày, 7 ngày mỗi tuần, 365 ngày một năm. Khi đó thì thông tin giải mã ra không còn giá trị nữa nên không đáng để bỏ công sức, nguồn lực vào chuyện đó. Còn nếu đã biết về thuật toán hoặc khóa mã hóa thì người nhận có thể nhanh chóng giải mã trong tích tắc và không gặp bất kì trở ngại nào.

Những biện pháp mã hóa thông dụng

Hiện tại người ta có 4 biện pháp thông dụng:

Mã hóa cổ điển


Đây là cách đơn giản nhất, tồn lại lâu nhất trên thế giới và không cần khóa bảo mật, chỉ cần người gửi và người nhận cùng biết về thuật toán này là được. Ví dụ, nếu chúng ta dùng thuật toán đổi kí tự trong câu văn thành kí tự liền kề trong bảng chữ cái thì chữ "Tinh tế" sẽ biến thành "Ujoi uf". Người nhận khi nhận được chữ "Ujoi uf" thì chỉ việc dịch ngược lại là xong.

Tuy nhiên, giải pháp mã hóa này được xem là không an toàn vì nếu một người thứ ba biết được thuật toán thì xem như thông tin không còn bảo mật nữa. Việc giữ bí mật thuật toán trở nên rất quan trọng, và không phải ai cũng có thể giữ bí mật đó một cách trọn vẹn. Có khả năng người đó sẽ rò rỉ ra cho kẻ địch, hoặc có ai đó ngồi giải ra thuật toán thì xem như chúng ta thua cuộc.

Mã hóa một chiều (hash)

Quảng cáo


Phương pháp này dùng để mã hóa những thứ không cần dịch lại nguyên bản gốc. Ví dụ, khi bạn đăng nhập vào Tinh tế, mật khẩu mà bạn nhập sẽ được chuyển thành một chuỗi dài các kí tự bằng một thứ gọi là hash function (tạm dịch: hàm băm). Chuỗi này sẽ được lưu vào cơ sở dữ liệu chứ không lưu mật khẩu thô của bạn nhằm tăng tính bảo mật, lỡ hacker có trộm dữ liệu thì cũng chỉ thấy những thứ như FIiyXYB547bhvyuuUIbZ chứ không biết password thật của bạn là gì. Mỗi lần bạn đăng nhập, hash function sẽ "băm" password thật của bạn thành chuỗi kí tự rồi so sánh nó với cái trong cơ sở dữ liệu, nếu khớp thì đăng nhập tiếp, không thì báo lỗi. Chúng ta không có nhu cầu dịch ngược chuỗi nói trên ra lại thành password thật để làm gì cả.

Nói thêm về hash function, nhiệm vụ của nó là chuyển một chuỗi có độ dài bất kì thành chuỗi kí tự có độ dài cố định. Ví dụ, nếu bạn quy định chuỗi kí tự sau khi "băm" sẽ dài 10 kí tự thì dù đầu vào của bạn có bao nhiêu chữ đi nữa thì kết quả nhận được sẽ luôn là 10 kí tự và chỉ 10 kí tự mà thôi.

Đặc điểm của hash function đó là trong cùng 1 điều kiện, dữ liệu đầu vào như nhau thì kết quả sau khi băm cũng sẽ y hệt như nhau. Nếu chỉ đổi một chút xíu thôi, có khi chỉ là 1 kí tự nhỏ thì chuỗi kết quả sẽ khác hoàn toàn. Cũng vì vậy mà người ta dùng hash function để kiểm tra tính toàn vẹn của dữ liệu. Ví dụ, trước khi gửi một file Word cho thằng bạn thì mình dùng mã hóa một chiều và tạo ra được chuỗi sau băm là DFYUBUfyeufuefu. Khi thằng bạn đó download file xuống, nếu nó băm và cũng nhận được chuỗi DFYUBUfyeufuefu thì có nghĩa là file của mình còn nguyên, không bị can thiệp hay thất thoát. Còn nếu kết quả khác thì có nghĩa là file của mình trong quá trình truyền tải có thể đã bị lỗi làm mất một phần dữ liệu, hoặc tệ hơn là có ai đó đã xén bớt hay thêm vào thứ gì đó rồi.

Hiện nay, hai thuật toán hash function thường được dùng nhất là MD5 và SHA. Nếu bạn download file trên mạng thì đôi khi sẽ thấy dòng chữ MD5 do tác giả cung cấp, mục đích là để bạn so sánh file đã download với file gốc xem có bị lỗi gì không.

Mã hóa đối xứng (symmetric key encryption)

Chúng ta bắt đầu đi tìm hiểu về việc bảo mật có dùng khóa. Khóa ở đây được gọi là "key", nó là mấu chốt để thuật toán có thể nhìn vào mà biết đường mã hóa và giải mã dữ liệu. Cũng giống như cánh cửa nhà của bạn, nếu bạn có khóa thì bạn có thể nhanh chóng đi vào trong, còn không có khóa thì bạn vẫn có thể đục cửa hay kêu thợ sửa khóa nhưng sẽ tốn thời gian và công sức hơn. Mỗi chìa khóa cho mỗi ổ khóa trên thế giới là duy nhất với các đường rãnh không chìa nào giống chìa nào, và key mã hóa cũng tương tự như vậy.

Quảng cáo


Ở phương pháp mã hóa đối xứng, chìa khóa để mã hóa và giải mã là như nhau, thế nên người ta mới gọi là đối xứng, và tiếng Anh là symmetric. Theo một số tài liệu thì mã hóa đối xứng là giải pháp được sử dụng nhất phổ biến hiện nay, tuy nhiên mình chưa có tài liệu nào minh chứng số liệu cụ thể. Nhưng không sao, cũng không ảnh hưởng mấy đến bài viết và kiến thức của chúng ta.

Giả sử mình cần mã hóa một file hình để gửi cho bạn, thì quy trình sẽ như sau:
  1. Mình sử dụng một thuật toán mã hóa cộng với key của mình để mã hóa file (cách tạo key tạm không bàn đến, chủ yếu là dùng các giải thuật ngẫu nhiên)
  2. Bằng cách nào đó, mình giao cho bạn một key giống với mình, có thể là giao trước hoặc sau khi mã hóa file đều được.
  3. Khi bạn nhận file, bạn sẽ dùng key này để giải mã file ra thành file gốc có thể đọc được.
Ma_hoa_la_gi_1.png
Vấn đề ở đây đó là mình phải làm gì đó để chuyển key cho bạn một cách an toàn. Nếu key này bị lộ ra thì bất kì ai cũng có thể xài thuật toán nói trên để giải mã file, như vậy thì tính bảo mật sẽ không còn nữa. Ngày nay, người ta thường xài password như là key mã hóa, và bằng cách này bạn có thể nhanh chóng nhắn cho người nhận cùng đoạn password đó để xài làm key giải mã.

Các thuật toán mã hóa thường thấy bây giờ là DES và AES. Trong đó, AES phổ biến trong thế giới hiện đại hơn và nó dùng để thay thế cho DES vốn đã xuất hiện từ năm 1977. Hiện nay nhiều cơ quan chính phủ trên thế giới quy định tài liệu khi được gửi qua mạng phải mã hóa AES. Thuật toán AES có thể dùng nhiều kích thước ô nhớ khác nhau để mã hóa dữ liệu, thường thấy là 128-bit và 256-bit, có một số lên tới 512-bit và 1024-bit. Kích thước ô nhớ càng lớn thì càng khó phá mã hơn, bù lại việc giải mã và mã hóa cũng cần nhiều năng lực xử lý hơn.

Hiện tại, chế độ mã hóa mặc định của Android 5.0 đang xài là AES 128-bit. Điều này có nghĩa là mỗi khi bạn chuẩn bị ghi dữ liệu xuống bộ nhớ máy thì hệ điều hành sẽ mã hóa nó rồi mới tiến hành ghi. Tương tự, mỗi khi OS chuẩn bị đọc dữ liệu thì Android phải giải mã trước rồi mới chuyển ra ngoài, khi đó thì hình ảnh mới hiện ra được, các file nhạc mới chơi được và tài liệu mới có thể đọc được. Bằng cách này, nếu bạn có lỡ làm mất máy thì người lụm được cũng không thể xem trộm dữ liệu của bạn (giả sử bạn đã lock màn hình). Nếu người đó có gỡ chip nhớ ra để đọc thì dữ liệu cũng đã mã hóa hết. Tất nhiên, Android cũng xài key dạng symmetric (tạo ra dựa vào password của bạn), và key đó còn được băm thêm một lần nữa bằng SHA 256-bit để tăng tính an toàn.

Mình không có tài liệu về Windows 10 và OS X, nhưng cơ chế mã hóa của cả hai hệ điều hành này có vẻ như cũng tương tự, tức là xài AES và xài key tạo ra bằng password kết hợp thêm SHA.

Mã hóa bất đối xứng (public key encryption)


Nếu như ở trên khóa mã hóa và khóa giải mã đều giống nhau thì với phương pháp bất đối xứng, hai key này hoàn toàn khác nhau. Để phân biệt giữa hai khóa thì người ta gọi khóa mã hóa là public key, còn khóa giải mã là private key. Public, như cái tên đã gợi ý, mang tính chất "công cộng" và có thể được sử dụng để mã hóa dữ liệu bởi bất kì ai. Tuy nhiên, chỉ người nào nằm trong tay private key mới có khả năng giải mã dữ liệu để xem.

Quy trình mã hóa bất đối xứng như sau:
  1. Bên nhận sẽ tạo ra một cặp public - private key. Người này giữ lại private key cho riêng mình và cất cẩn thận, còn public key thì chuyển cho bên gửi (dưới hình thức email, copy qua USB, v.v) hoặc post đâu đó lên mạng
  2. Bên gửi sử dụng public key để mã hóa dữ liệu, sau đó gửi file đã mã hóa lại cho bên nhận
  3. Bên nhận lúc này sẽ xài private key đã lưu khi nãy để giải mã dữ liệu và sử dụng
Ma_hoa_la_gi_2.png
Đơn giản đúng không anh em? Đâu có khó hiểu lắm đâu.

Một nhược điểm của mã hóa bất đối xứng đó là tốc độ giải mã chậm hơn so với mã hóa đối xứng, tức là chúng ta phải tốn nhiều năng lực xử lý của CPU hơn, phải chờ lâu hơn, dẫn đến "chi phí" cao hơn. Khoảng thời gian lâu hơn là bao nhiêu thì còn tùy vào thuật toán mã hóa, cách thức mã hóa và key.

Chính vì thế mà hiện tại ít ai mã hóa cả một file bằng phương pháp bất đối xứng. Thay vào đó, họ xài phương pháp bất đối xứng để mã hóa chính cái key dùng trong mã hóa đối xứng (hoặc tạo ra key đó bằng cách tổng hợp public và private key của bên gửi và nhận). Như đã nói ở trên, mã hóa đối xứng có nhược điểm là key bị lộ là coi như xong đời, vậy thì giờ chúng ta mã hóa luôn cái key đó cho an toàn và có thể gửi key thoải mái hơn. Một khi đã giải mã bất đối xứng để ra key gốc rồi thì tiến hành giải mã thêm lần nữa bằng phương pháp đối xứng để ra file ban đầu.

Một thuật toán mã hóa thường được xài là RSA.

Ứng dụng của mã hóa


Mã hóa chủ yếu để tránh những cái nhìn soi mói của những người tò mò tọc mạch, của những người xấu, nói chung là những người mà bạn không muốn thông tin của mình lộ ra ngoài. HTTPS là một ví dụ, nó dùng thuật toán mã hóa TLS (lai giữa đối xứng và bất đối xứng) để mã hóa dữ liệu của bạn khi gửi thông tin giữa trình duyệt và máy chủ. Bằng cách này, những kẻ tọc mạch với hi vọng đánh cắp dữ liệu trong lúc dữ liệu đang được gửi đi sẽ không biết chính xác dữ liệu là gì (do chúng không nắm được key trong tay).

HTTPS là dạng mã hóa thông tin đang di chuyển, và người ta còn có thể dùng mã hóa để đảm bảo an toàn cho rất nhiều thứ khác, từ email, thông tin di động, Bluetooth cho đến ứng dụng vào các máy ATM. Ngoài ra, người ta còn mã hóa dữ liệu đang nằm yên, ví dụ như mấy tấm hình trong máy, các file đã lưu vô ổ cứng, hoặc cơ sở dữ liệu của các công ty. Nhiều bút nhớ USB ngày nay cũng cung cấp phần mềm AES đi kèm để bạn có thể mã hóa dữ liệu của mình thông qua password, nếu lỡ có làm rớt mất USB thì cũng không lo bị ai đó lấy trộm data chứa bên trong. Ngay cả khi kẻ xấu cố gắng gỡ chip ra, gắn vào một phần cứng khác để đọc thì cũng chỉ thấy dữ liệu đã mã hóa mà thôi.

Chúng ta cũng hay nghe đến "chữ kí điện tử", thứ mà các doanh nghiệp hay sử dụng để đính kèm vào tài liệu để chứng minh rằng chính họ là người soạn thảo tài liệu chứ không phải là ai khác giả mạo. "Chữ kí" đó cũng được tạo ra dựa trên những phương pháp bảo mật nói trên. Thời sơ khai người ta xài RSA, sau này có những thứ tiên tiến hơn, an toàn hơn được phát triển thêm và nhanh chóng phổ biến ra toàn thế giới.

Tất nhiên, không có gì là an toàn tuyệt đối 100%. Mã hóa bằng RSA đôi khi vẫn có thể bị phá mã nếu sử dụng một cái máy tính đủ mạnh chạy trong thời gian đủ lâu. Mã hóa HTTPS cũng có cách để khai thác lỗ hổng trong cơ chế và ăn cắp dữ liệu. Chính vì thế mà mới có nhiều vụ tấn công xảy ra trên thế giới công nghệ ngày nay.

Một số người bày tỏ lo ngại rằng mã hóa sẽ khiến các cơ quan chính phủ gặp khó khăn trong việc chống khủng bố hoặc theo dõi thông tin tình báo. Hiện vẫn còn nhiều luồng ý kiến trái chiều về điều này, nhưng theo CEO Tim Cook của Apple thì một khi bạn đã cố tình để lại "lỗ hổng" cho cơ quan chính phủ thì không có gì đảm bảo rằng "lỗ hổng" đó sẽ không bị khai thác bởi những người xấu. Do đó, cách tốt nhất là cố gắng hoàn thiện hệ thống và không để lại "lỗ hổng" một cách cố ý cho bất kì ai cả. Việc mở "lỗ hổng" không phải là cách đúng đắn để giải quyết vấn đề khủng bố.

109 bình luận
Chia sẻ

Xu hướng

taiyka
ĐẠI BÀNG
8 năm
Đúng ngành mình học.
Top này có vẻ không được quan tâm nhỉ :p:p
jino
TÍCH CỰC
8 năm
@Duy Luân

Theo mình từng đọc thì Windows phone 8.x đã dùng mã hóa kiểu BitLocker tương tự Windows PC, còn 128 hay 256 AES thì k rõ lắm.
TTris
TÍCH CỰC
8 năm
Mã hóa chỉ có dân jav xài thông dụng...
@sroyan01 Uầy!em thì chỉ chọn hide folder jav và khi cần thì lại show hidden file and folder bác ạạ,nhưn chắc bác cũng jav fan phảiphải?hj
TTris
TÍCH CỰC
8 năm
@anhmtk Theo phong trào nói jav chứ không fan bác ạh!
Hide folder hình như cũng 1 dạng mã hóa theo kiểu đổi tên file và đuôi file thành 1 đuôi tào lao nào đó để phần mềm không nhận diện được!
Một bài viết hay và bổ ích đấy chứ, cũng dễ hiểu nữa.
xe360.vn
TÍCH CỰC
8 năm
hay
wrek
ĐẠI BÀNG
8 năm
ĐĐọc "đại chiến Hacker" cũng có cái vụ mã bất đối xứng để trao đổi trên mạng thông tin Xnet được đăng nhập bằng cái Xbox.
Mã hoá đôi khi cũng như việc lấy vợ.
Vợ là chỉ để dành cho một mình mình
Nhưng đôi khi có thằng vẫn mò vào ngủ cùng đc.
merocazi
ĐẠI BÀNG
8 năm
Hay
hocnv09
ĐẠI BÀNG
8 năm
Những điều vô cùng cơ bản trong sách đang được đưa ra giới thiệu ở thực tế với vai trò là một thứ vô vùng cao cấp
@hocnv09 Diễn đàn này ko phải chỉ dành riêng cho IT nên ko phải ai cũng có sách kiểu này để mà đọc.
Hơn nữa cơ bản hay ko tôi ko biết nhưng tôi vẫn thấy các site dùng https, file gửi có kèm MD5, pass gửi dưới dạng hásh vào ngay thời điểm hiện tại.
Như vậy ai biết rồi có thể lượn.
"có điều thông tin bị đánh cắp xong thì cũng xài được"

Mã hóa xong cũng xài được thì mã hóa làm gì? @Duy Luân
trionah
ĐẠI BÀNG
8 năm
Luân đẹp trai là ko cần phải bàn nữa. Chúc vui.
KN.Chief
ĐẠI BÀNG
8 năm
Em đọc hết bài của a.. ấn tượng với kiến thức 1 mà ấn tượng với ví dụ đến 10 😁
Bài viết khá có ích
hay
spy179
TÍCH CỰC
8 năm
có phần mềm nào viết kí tự mã hóa không ae ?
dual1
CAO CẤP
8 năm
nói đến mã hóa nhắc mình nhớ đến julian assange của wikileak, rất kinh hoàng - ngoài việc lấy được hàng ngàn trang tài liệu của NSA mà còn bẻ mã hóa được thì ghê đến cỡ nào. Một tổ chức có bề dày lịch sử về tình báo và mã hóa như NSA mà julian biên dịch được thì quả là ngưỡng mộ, hỏi sao Mỹ không truy lùng khắp thế giới.
bernerasu
TÍCH CỰC
8 năm
Sao mod không giới thiệu ohaanf mềm nào để mã hóa và giải mã nhỉ? Cái đó rất cần đó mod ơi
@bernerasu win rar. Mình hay dùng nó để mã hoá mấy cái ảnh người iu cũ. Gấu mẹ mà bít key là 1234567 là mềnh toi!!!
kurt80
TÍCH CỰC
8 năm
@bernerasu Tìm trên mạng sẽ thấy, nhưng cái bạn cần là một cái máy tính siêu khủng long thì mới chạy giải mã được nhé.
Còn nhanh hơn thì các cao thủ thường lừa nhau để đọc bàn phím, đọc pass trực tiếp. Nếu đã giữ key tốt thì cứ yên tâm mà kê cao gối ngủ. Ai giải mã được thì cho luôn không phải nghĩ.
Eldimio
CAO CẤP
8 năm
@bernerasu WinRAR có đặt password (mình không rõ chuẩn mã hóa là gì). WinZip thì là AES 128 hoặc 256. Tương tự, những file văn bản từ Office 2010 trở đi (chuẩn .docx, .xlsx, .pptx) cũng có mã hóa AES (vì bản chất file .docx, .xlsx, .pptx... là 1 file .zip trong đó có cả mớ tài liệu dạng xml 😁).
Vmemory
CAO CẤP
8 năm
@Eldimio Trước WinRAR cũng AES 128, sau này là AES 256 rồi bạn. Nếu nén đặt pass rar5 thì gần như không dò được (nhiều ứng dụng chưa hỗ trợ rar5)
hongson890
TÍCH CỰC
8 năm
đề tài luận văn tốt nghiệp của mình là chữ ký số. Hồi ấy tìm hiểu cái này nát rồi :v Nhớ hồi ấy mình mất một tháng để code ứng dụng trên java đọc ghi chữ ký số trong thiết bị USB token. Sau này ứng dụng ấy được công ty sau này mình làm thương mại hóa 😁, coi như cũng có tí tác dụng. :D

Xu hướng

Bài mới









  • Chịu trách nhiệm nội dung: Trần Mạnh Hiệp
  • © 2024 Công ty Cổ phần MXH Tinh Tế
  • Địa chỉ: Số 70 Bà Huyện Thanh Quan, P. Võ Thị Sáu, Quận 3, TPHCM
  • Số điện thoại: 02822460095
  • MST: 0313255119
  • Giấy phép thiết lập MXH số 11/GP-BTTTT, Ký ngày: 08/01/2019