Mã hóa sau đây là mã hóa gì ?[68766e67726f7570732e6e6574]
Bách khoa toàn thư mở Wikipedia Show
Trong mật mã học – một ngành toán học ứng dụng cho công nghệ thông tin, mã hóa là phương pháp để biến thông tin (phim ảnh, văn bản, hình ảnh...) từ định dạng bình thường sang dạng thông tin không thể hiểu được nếu không có phương tiện giải mã. Giải mã là phương pháp để đưa từ dạng thông tin đã được mã hóa về dạng thông tin ban đầu, quá trình ngược của mã hóa. Một hệ thống mã hóa bao gồm các thành phần:
Quá trình mã hóa được tiến hành bằng cách áp dụng hàm toán học E lên thông tin P, vốn được biểu diễn dưới dạng số, để trở thành thông tin đã mã hóa C Quá trình giải mã được tiến hành ngược lại: áp dụng hàm D lên thông tin C để được thông tin đã giải mã P Các hệ thống mã hóa[sửa | sửa mã nguồn]Có hệ thống mã hóa đối xứng và hệ thống mã hóa bất đối xứng. Hai loại mã khóa này khác nhau ở số lượng khóa. Mã hóa đối xứng sử dụng cùng một khóa để mã hóa/giải mã. Trong khi đó, mã hóa bất đối xứng sử dụng hai khóa khác nhau để mã hóa và giải mã thông tin. Mỗi hệ thống mã hóa có ưu nhược điểm riêng. Mã hóa đối xứng xử lý nhanh nhưng độ an toàn không cao. Mã hóa bất đối xứng xử lý chậm hơn, nhưng độ an toàn và tính thuân tiện trong quản lý khóa cao. Trong các ứng dụng mã hóa hiện tại, người ta thường kết hợp các ưu điểm của cả hai loại mã hóa này. Ứng dụng[sửa | sửa mã nguồn]Mã hóa có vai trò rất quan trọng, đặc biệt là trong giao dịch điện tử bằng các loại tiền mã hóa như Bitcoin chẳng hạn. Nó giúp đảm bảo bí mật, toàn vẹn của thông tin, khi thông tin đó được truyền trên mạng. Mã hóa cũng là nền tảng của kĩ thuật chữ ký điện tử, hệ thống PKI... Phân loại[sửa | sửa mã nguồn]Các loại mã hóa SHA: SHA-64 SHA-128 SHA-256 SHA-512 Tham khảo[sửa | sửa mã nguồn]Lời mởGần đây trên mấy blog hay trang báo chúng ta có thể dễ đọc được tin vụ Lotte lộ tài khoản và mật khẩu người dùng và thấy bảo rất nguy hiểm vậy nguy hiểm ở mức nào và liệu người dùng đổi mật khẩu ở lotte thì còn có an toàn không?. Theo mình thì nguy hiểm vl (very lắm) luôn bởi lẽ thứ nhất là người dùng đã bị lộ thông tin cá nhân và có thể bị dùng thông tin đó cho mục đích ko hay nào đó như spam chẳng hạn. Nhưng nguy hiểm nhất vẫn là bị lộ mật khẩu vì thói quen người dùng thường dùng chung mật khẩu cho nhiều trang web do đó nếu lộ ở trang Lotte thì những đối tượng xấu có thể đơn giản chạy con crawler sang các trang khác với email/tài khoản + password trong đống dữ liệu đó và người dùng có thể mất nhiều thứ hơn. OK nói đến đây thì chắc hẳn ai cũng biết để đảm bảo an toàn chúng ta cần mã hóa mật khẩu. Nếu bạn nào hay code Rails mà để ý khi chúng ta dùng gem Devise để đăng nhập thì trong db sẽ không có trường mật khẩu mà thay vào đó là trường mật khẩu mã hóa
(encrypted_password) với nội dung ví dụ Các Định nghĩa cơ bản của mã hóa cho anh em dev
Note: đừng bao giờ tự sáng tạo kiểu mã hóa của riêng mình khi bạn chưa nắm rõNhư tôi đã nói ở trên các phương pháp mã hõa cần đảm bảo rất nhiều các yếu tố do đó chỉ nên viết phương pháp mã hóa khi bạn là chuyên gia và chứng minh là nó đủ tốt để dùng, còn không thì hãy cứ dùng những cái đã có sẵn vì nó đã đủ tốt và kiểm tra kĩ lưỡng để sử dụng rồi. Sơ đồ chung của các pp mã hóaTa có thể thấy phần mã hóa gồm các mảng chính sau
Keyless Cryptography / mã hóa không dùng keyĐơn giản nhất trong mã hóa đó là dùng Hàm Hash với chỉ 1 input đầu vào và sẽ luôn trả ra 1 đoạn ký tự đầu ra với chiều dài cố định
và khi bạn thay đổi nội dung input dù là rất nhỏ thì kết quả ouput cũng sẽ thay đổi khác hoàn toàn
Các mã hóa thường dùng như sha256, MD5, BLAKE2 ... Ưu điểm của phương pháp này đó là tốc độ nhanh, mã hóa theo 1 chiều và không thể giải mã ngược lại. Tuy nhiên ở mã hóa MD5 tính bảo mật lại khá yếu do size oupt sinh ra bé nên người ta có thể tính toán ra 1 đoạn mã tương tự có thể sinh ra ouput giống với input gốc (các bạn tự liên hệ risk khi dùng MD5 mã hóa password lưu trong db và để lộ db). Tác dụng của phương pháp này chủ yếu là dùng để xác thực tính toàn vẹn của file / mesage (khi bạn down load các file lớn trên mạng về máy thì thường có thêm 1 đoạn mã MD5 cái này là để bạn check lại mã MD5 sinh ra với file bạn down về và với dữ liệu gốc, nếu đoạn mã MD5 là giống nhau tức là file bạn down về giống với file gốc còn nếu sai thì tức là trong lúc tải file về bạn đã bị mất mát dữ liệu) Secret Key Cryptography / Mã hóa bằng khóa bí mậtĐây là kiểu mã hóa mà input vào ngoài dữ liệu còn có thêm 1 đoạn mã key bí mật mà không bị public ra bên ngoài Keyed Hash FunctionsĐây là kiểu mã hóa dùng hàm hash nhưng có thêm 1 giá trị key nhằm tạo ra 1 message_authentication 1 trong phương pháp hay dùng đó là HMAC
Phương pháp này thì được đánh giá an toàn hơn hash thường vì có key bí mật và chỉ ai có key thì mới có thể tính toán được đoạn mã xác thực sau khi mã hóa ngược lại đoạn nội dung và so sánh với mã xác thực đi kèm nhằm đảm bảo tính toàn vẹn của dữ liệu nhận được. Secret Key Encryption - mã hóa key bí mậtĐơn giản mà nói thì đây là kiểu mã hóa dùng một key bí mật mà đảm bảo dùng key này ta có thể mã hóa dữ liệu (plain text) thành 1 đoạn mật mã (ciphertext) và đồng thời có thể khôi phục được duy nhất toàn bộ dữ liệu từ đoạn mã hóa kia. Tuy nhiên kiểu đơn giản (như kiểu ECB mode) như này thì sẽ không an toàn cho 1 số trường hợp ví dụ khi bạn mã hóa 1 đoạn (16bytes) các ký tự giống nhau thì đoạn mã hóa trả ra cũng sẽ bị lặp lại. Do đó mã hõa dùng key bí mật hiện đại ngày nay ngoài 2 trường trên người ta đã thêm 1 trường mới là vecto khởi tạo IV (Initialization Vector) hoặc nonce (1 số ngẫu nhiên dùng 1 lần). Trong mã hóa này thì trường key sẽ cần bảo mật 2 trường IV, nonce thì sẽ lưu trong đoạn mã gửi đi. Authenticated Secret-Key Encryption - Mã hóa key xác thựcĐây là phương pháp kết hợp 2 cách trên. Đó là luôn mã hóa bằng key kết hợp với việc dung 1 key khác để xác thực nội dung đoạn mã hõa thông qua tính toán ra giá trị MAC dựa vào giá trị đoạn mã hóa truyền vào Việc mã hóa này đảm bảo tính an toàn đó là đoạn mã chỉ có thể được giải mã đúng khi dùng đúng key và tính toàn vẹn, xác thực của nội dung đoạn mã nhận được Public Key Cryptography / Mã hóa bằng public keyĐể mô tả 1 các đơn giản các bạn có thể xem ở hình sau như các bạn thấy ở đây nó khác so với dùng 1 key bí mật ở phần trên, ở đây ta dùng tới 4 key Đầu tiên là 2 key bí mật của từng người mà ko được chia sẻ cho bất cứ ai (lưu ý ko được chia sẻ cho bất cứ ai) và 2 key public tương ứng với 2 key bí mật, 2 key public này được thông báo tới bất cứ ai Với điều kiện dựa vào private key ta có thể tính toán ra được public key tuy nhiên chiều ngược lại là ko được ta không thể dựa vào public key để tính ra giá trị của private key, điều này đảm bảo tính bảo mật của private key là chỉ duy nhất người tạo ra key biết. Phương thức hoạt động của kiểu mã hóa này đó là 2 người sẽ trao đổi public key cho nhau. Sau đó khi A muốn gửi dữ liệu sang bên B thì A sẽ gửi dữ liệu bị mã hóa bới public key của B (key đã được chia sẻ ở bước trước) sang B, sau đó B sẽ dùng private key của mình để giải mã dữ liệu. Tính bảo mật dữ liệu ở đây được đảm bào là nhờ dữ liệu sau khi được mã hóa bằng public key của B thì chỉ có dùng private key của B mới giải mã được, mà khóa private B được giữ bởi duy nhất B nên không ai có thẻ giải mã được đoạn mã hóa bằng publib key B. Khi B gửi dữ liệu sang A thì cũng dùng các tương ứng là mã hóa dữ liệu bằng public key của A. Ngoài ra phương pháp này còn có chữ kí số dựa vào 1 phần nội dung dữ liệu được mã hóa bằng private key, người nhận dữ liệu sẽ dùng public key của người gửi đã chia sẻ trước đó để kiểm tra lại chữ kí và so sánh với dữ liệu nhận được. OK đây là nhưng kiến thức cơ bản, giờ chúng ta quay lại 1 chút về câu hỏi mở đầu, là việc mã hóa mật khẩu chúng ta sẽ tìm hiểu sâu hơn thông qua việc đặt vấn đề ngược cho phương pháp mã hóa mật khẩu mà hiện chúng ta đang sửa dụng Hỏi: Mã hóa mật khẩu sử dụng hàm hash (thường dùng bcrypt), vậy tại sao lại dùng hàm hash để mã hóa mà không phải dùng cách khác như dùng mã hóa bằng secret key, publickey ... Đáp: chúng ta chỉ sử dụng hàm hash cho mật khẩu mà không phải các phương pháp khác vì lý do cơ bản nhất đó là tính không thể dịch ngược điều đó đảm bảo thông tin mật khẩu chính xác bạn lưu trên máy chủ là khổng thể bị tra lại trên dữ liệu, cho dù là admin quản lý hoặc các hacker chiếm được quyền điều khiển hệ thống hay khi xảy ra sự cố như lộ db ra ngoài (như vụ Lotte ở phần mở đầu) thì các đối tượng xấu vẫn không thể nào biết được mật khẩu thực sự bạn sử dụng, từ đó hạn chế được các tổn thất chỉ ở 1 vùng dữ liệu bị chiếm dụng mà thôi. Tuy nhiên hash password khác Hash cơ bản vì nó cần đảm bảo thêm nhiều điều kiện để đảm bảo tính an toàn Lời kếtĐây chỉ là những kiến thức cơ bản của mã hóa, hi vọng là các bạn đã có thêm những kiến thức mới về bảo vệ an toàn thông tin Tham khảo : https://paragonie.com/blog/2015/08/you-wouldnt-base64-a-password-cryptography-decoded |