Bạn có biết sự khác biệt giữa mã hóa và hàm băm không? Bạn có biết salting là gì không? Bạn có muốn nó hay không? Đó là một câu hỏi tu từ – tôi sẽ nói với bạn.
Mã hóa và hàm băm đôi khi bị lẫn lộn với nhau. Salting thì không nhiều như vậy. Nhưng chúng ta vẫn nên xem xét cả 3 để có thể hiểu rõ hơn về mã hóa nói chung.
Mã hóa là gì?
Mã hóa (Encryption) là hành động xáo trộn thông tin theo cách mà chỉ người nào đó có khóa tương ứng mới có thể xắp xếp lại và đọc nó. Mã hóa là một hàm hai chiều. Khi bạn mã hóa một cái gì đó, bạn đang làm như vậy với ý định giải mã nó sau này.
Đây là điểm khác biệt chính giữa mã hóa và băm.
Để mã hóa dữ liệu, bạn sử dụng một thuật toán mã hóa, đó là một thuật toán – một loạt các bước được xác định rõ ràng có thể được theo dõi theo cách thủ tục – để mã hóa và giải mã thông tin. Nhưng như bạn sẽ thấy, một thuật toán thực sự không có gì hơn là một bộ quy tắc – và chúng thực sự có thể khá đơn giản.
Mã hóa đã được sử dụng từ rất lâu về trước. Nó có niên đại ít nhất là từ năm 1900 trước Công nguyên sau khi các nhà sử học phát hiện ra một bức tường trong lăng mộ với những chữ tượng hình khác tiêu chuẩn được đục vào đó. Và người ta coi đó là những ký tự được mã hóa.
Người Ai Cập cổ đại sử dụng một dạng mã hóa đơn giản. Như Caesar, mật mã của nó là một trong những ví dụ quan trọng nhất về mã hóa trong lịch sử. Caesar sử dụng mật mã thay đổi nguyên thủy đã thay đổi chữ cái bằng cách đếm về phía trước một số vị trí được đặt trong bảng chữ cái. Dù vậy, nó rất hữu ích, khiến mọi thông tin bị chặn bởi đối thủ của Caesar thực sự vô dụng.
Vài nghìn năm sau, một thuật toán mật mã thay thế – một loại mật mã thay thế hoán đổi các ký hiệu cho các từ thông dụng nhằm tránh một kỹ thuật giải mã được gọi là phân tích tần số.
Chúng ta hãy xem mã hóa bằng cách sử dụng một thuật toán mã hóa đơn giản. Trong trường hợp này, tôi sẽ mã hóa câu, "Don't be a jerk" bằng cách sử dụng một thuật toán thay đổi chữ cái đơn âm mà chỉ thay thế từng chữ cái bằng một ký tự liên tiếp ba vị trí phía trước nó.
Plaintext: Don't be a jerk
Trở thành:
Ciphertext: Grqwehdmhun
Tôi đã bỏ qua dấu chấm câu vì lợi ích của sự đơn giản nhưng bản mã thường được truyền mà không có dấu cách hoặc dấu chấm câu nào để tránh lỗi và ẩn ranh giới từ. Vì vậy, bằng cách sử dụng khóa tương ứng, người khác có thể giải mã thông điệp này và đọc nó. Rõ ràng, mật mã chúng tôi sử dụng trong mã hóa kỹ thuật số phức tạp hơn nhiều, nhưng bạn chắc chắn cũng hiểu cách thức hoạt động.
Thuật toán mã hóa trong lịch sử
Hãy bắt đầu bằng cách đi qua một số loại mật mã khác nhau, sau đó chúng ta sẽ đi vào các thuật toán hiện đại được sử dụng trong mã hóa ngày nay.
- Shift Ciphers – Giống như ví dụ mà chúng ta đã thảo luận ở trên, hai bên xác định một số từ 1-25 và thay đổi các chữ cái mà số lượng dấu cách trong bảng chữ cái. Số thay đổi đóng vai trò là chìa khóa.
- Substitution Ciphers– là một phương pháp mã hóa theo đó văn bản ban đầu được thay thế bằng bản mã , theo một hệ thống cố định; "đơn vị" có thể là các chữ cái đơn (phổ biến nhất), các cặp chữ cái, ba chữ cái, các hỗn hợp của các chữ cái trên, v.v. Người nhận giải mã văn bản bằng cách thực hiện thay thế nghịch đảo.
- Transposition Ciphers – Thuật toán này sử dụng một bộ quy tắc, đóng vai trò là khóa, để thay đổi thứ tự của văn bản thành các hoán vị khác nhau mà sau đó có thể được mã hóa. Ví dụ phổ biến là Rail Fence và Route ciphers.
- Polyalphabetic Ciphers – Đây là một loại mật mã thay thế sử dụng nhiều bảng chữ cái để làm phức tạp hơn nữa giải mã trái phép của bản mã.
- Nomenclator ciphers – Một loại mật mã thay thế thay thế các từ thông thường bằng các ký hiệu để thử và loại bỏ một dạng mã hóa cụ thể.
Cryptanalysis là nghiên cứu về các hệ thống mật mã với ý định tìm ra điểm yếu trong chúng. Một trong những dạng mã hóa phổ biến nhất, có niên đại từ một nhà toán học Ả Rập tên là Al-Kindi, sống khoảng 800 AD, được gọi là phân tích tần số. Nó kiểm tra ciphertext cho các biểu tượng lặp đi lặp lại hoặc chuỗi ký tự và tham chiếu chéo chúng với các từ sẽ xuất hiện với tần số cao trong thông điệp đang được giải mã. Vì vậy, ví dụ, nếu bạn đang viết một tin nhắn cho Napoléon, nó chỉ hợp lý mà bạn sẽ sử dụng tên của mình một vài lần. Bằng cách kết hợp phiên bản mã hóa với tên của mình, nó giúp bạn bắt đầu ánh xạ khóa và giải mã thông báo.
Polyalphabetic ciphers và nomenclator ciphers phù hợp hơn để chịu được phân tích tần số so với các đối tác cổ điển của chúng. Mật mã đa ngôn ngữ tiếp tục được sử dụng cho đến Thế chiến II khi máy Enigma bị nứt.
Mã hóa hiện đại
Trước khi chúng ta có thể nói về mật mã mã hóa hiện đại, chúng ta cần nói một chút về khóa công khai và riêng tư và cách cuộc cách mạng kỹ thuật số đã thay đổi mã hóa. Tất cả các ví dụ mà chúng tôi vừa xem là những gì chúng tôi gọi là Mật mã khóa riêng. Mã hóa hoàn toàn phụ thuộc vào khóa riêng, vốn phải được trao đổi vật lý để giải mã. Nếu bạn biết bất cứ điều gì về Khóa riêng tư, đó là thực tế rằng chúng là bất khả xâm phạm. Việc khóa riêng của bạn bị xâm phạm có thể là thảm họa . Vì vậy, phải mang theo vật lý và vượt qua nó chỉ làm cho nó nhiều hơn một nguy cơ. Người ta đã chết trên các thỏa hiệp quan trọng trong suốt lịch sử.
Ngày nay, nhờ công nghệ máy tính và internet, giờ đây chúng ta có thể thực hành mật mã khóa công khai. Với mật mã khóa công khai, một khóa công khai được sử dụng để mã hóa và khóa riêng tư khác được sử dụng để giải mã. Bạn thấy điều này trong quá trình handshake SSL, nơi họ đã giải quyết các vấn đề rủi ro trong lịch sử với trao đổi khóa vật lý bằng cách sử dụng khóa công khai có sẵn để mã hóa khóa phiên đối xứng và gửi nó trở lại máy chủ để giải mã bằng khóa riêng của nó.
Ngày nay, các dạng mã hóa phổ biến nhất là:
- Mã hóa bất đối xứng – Đây là ví dụ về Khóa công khai mà chúng tôi vừa đưa ra. Một khóa mã hóa, khóa còn lại giải mã. Việc mã hóa chỉ đi một chiều. Đây là khái niệm hình thành nền tảng cho PKI (cơ sở hạ tầng khóa công khai), là mô hình tin cậy trải qua SSL / TLS.
- Mã hóa đối xứng – Đây là hình thức gần gũi hơn với một hình thức mã hóa khóa riêng. Mỗi bên đều có khóa riêng có thể mã hóa và giải mã. Như chúng ta đã thảo luận trong ví dụ trên, sau khi mã hóa bất đối xứng xảy ra trong bắt tay SSL, trình duyệt và máy chủ giao tiếp bằng cách sử dụng khóa đối xứng được truyền đi.
Giữa hai, mã hóa bất đối xứng có xu hướng mạnh hơn do tính chất một chiều của nó.
Khi bạn đang mua chứng chỉ SSL và xem "2048-bit" được ném xung quanh, đó là việc tham chiếu đến độ dài khóa riêng tư. Khi bạn nhìn thấy "256-bit" được đề cập, đó là đề cập đến kích thước của các khóa phiên đối xứng được sử dụng trong giao tiếp thực tế. Điều đó không có nghĩa là mã hóa đối xứng kém an toàn hơn. Nó vẫn sẽ mất một siêu máy tính hàng ngàn năm để giải mã mã hóa 256-bit .
Lý do mã hóa 256 bit đối xứng được sử dụng để giao tiếp là nó nhanh hơn, có nghĩa là hiệu năng tốt hơn.
Thuật toán mã hóa hiện đại
Bây giờ chúng ta đã thảo luận về mã hóa đối xứng và không đối xứng, chúng ta có thể nhận được một số thuật toán mã hóa hiện đại.
- AES – AES là viết tắt của Advanced Encryption Standard, ban đầu được gọi là Rijndael, nó là đặc tả cho mã hóa được công bố bởi Viện Tiêu chuẩn và Công nghệ Quốc gia (NIST) vào năm 2001. Nó đặt plaintext thông qua một số "vòng chuyển đổi" được xác định bởi kích thước khóa, mỗi vòng bao gồm một số bước xử lý. Chúng ta đừng đi quá xa vào cỏ dại trên cái này. AES là một thuật toán phổ biến với SSL / TLS. Nó thay thế tiêu chuẩn mã hóa ngày (DES) đã được tạo ra vào năm 1977.
- RSA – RSA là viết tắt của Rivest-Shamir-Adlemen, sau những người sáng tạo, nó là một thuật toán mã hóa khóa công khai (không đối xứng) đã có từ năm 1978 và vẫn được sử dụng rộng rãi hiện nay. Nó sử dụng sự thừa số của các số nguyên tố để mã hóa bản rõ. [Sự thật thú vị: Không may tên Clifford Cocks, một nhà toán học làm việc cho GCHQ, một cơ quan tình báo Anh, đã phát minh ra một hệ thống tương đương năm năm trước đó, vào năm 1973, nhưng nó không được giải mã cho đến năm 1997.]
- ECC – ECC là viết tắt của Elliptic Curve Cryptography, dựa trên cấu trúc đại số của các đường cong elip trên các trường hữu hạn. Mặc dù ECC đã có từ năm 1985, nhưng nó chỉ được sử dụng kể từ năm 2004. ECC có những lợi thế riêng biệt so với RSA và có khả năng sẽ đóng một vai trò nổi bật hơn trong tương lai của SSL / TLS.
- PGP – PGP là viết tắt của Pretty Good Privacy, nó được tạo ra vào năm 1991 bởi Phil Zimmerman. Nó thực sự là một bộ sưu tập các thuật toán hơn là một thuật toán duy nhất, tất cả cho băm, nén dữ liệu và cả mật mã khóa công khai và riêng tư. Mỗi bước sử dụng một thuật toán khác nhau. PGP đã bị chỉ trích vì khả năng sử dụng kém, thiếu tính phổ biến và độ dài của khóa.
Khi nào mã hóa nên được sử dụng?
Như chúng ta đã thảo luận ở trên, mã hóa là một hàm hai chiều. Bạn mã hóa thông tin với ý định giải mã nó sau này. Vì vậy, thư từ với ai đó trực tuyến, bảo vệ dữ liệu đám mây của bạn hoặc truyền dữ liệu tài chính là tất cả các ví dụ về thời gian khi mã hóa phù hợp.
Điều quan trọng là mã hóa có thể đảo ngược. Nhưng Hashing thì không.
Hashing là gì?
Hashing là việc sử dụng thuật toán để ánh xạ dữ liệu của bất kỳ kích thước nào đến độ dài cố định. Đây được gọi là giá trị băm (hoặc đôi khi mã băm hoặc tổng băm). Trong khi mã hóa là một hàm hai chiều, băm là một hàm một chiều. Mặc dù về mặt kỹ thuật có thể đảo ngược thứ gì đó băm, sức mạnh tính toán yêu cầu làm cho nó không khả thi. Hashing là một chiều.
Bây giờ, trong khi mã hóa có nghĩa là để bảo vệ dữ liệu trong quá cảnh, băm có nghĩa là để xác minh rằng một tập tin hoặc một phần dữ liệu đã không bị thay đổi – rằng nó là xác thực.
Đây là cách nó hoạt động, mỗi thuật toán băm xuất ra ở độ dài cố định. Vì vậy, ví dụ, bạn có thể nghe về SHA-256, điều đó có nghĩa là thuật toán sẽ xuất ra một giá trị băm dài 256 ký tự.
Mỗi giá trị băm là duy nhất. Nếu hai tệp khác nhau tạo ra cùng một giá trị băm duy nhất thì điều này được gọi là va chạm và nó làm cho thuật toán cơ bản vô dụng. Năm ngoái, Google đã tạo ra một vụ va chạm với thuật toán băm SHA-1 để chứng minh rằng nó dễ bị tổn thương. SHA-1 đã chính thức bị loại bỏ để ủng hộ SHA-2 vào đầu năm 2016.
Dù sao, đây là một ví dụ về hash, giả sử bạn muốn ký vào một phần mềm và làm cho nó có sẵn để tải xuống trên trang web của bạn. Để làm điều này, bạn sẽ tạo ra một hash của kịch bản bạn đang ký, sau đó sau khi thêm chữ ký số của bạn (đây là quá trình hash). Sau đó, toàn bộ sẽ được mã hóa để nó có thể được tải xuống.
Khi khách hàng tải xuống phần mềm, trình duyệt của họ sẽ giải mã tệp, sau đó kiểm tra hai giá trị băm duy nhất. Sau đó trình duyệt sẽ chạy cùng hàm băm, sử dụng cùng một thuật toán và băm cả tệp và chữ ký một lần nữa. Nếu trình duyệt tạo ra giá trị băm giống nhau thì nó biết rằng cả chữ ký và tệp đều là xác thực – chúng không bị thay đổi.
Nếu không, trình duyệt sẽ đưa ra cảnh báo.
Hãy nhớ rằng, không có hai tệp nào có thể tạo cùng giá trị băm, do đó, bất kỳ thay đổi nào – thậm chí là tinh chỉnh nhỏ nhất – sẽ tạo ra một giá trị khác.
Thuật toán Hashing phổ biến
Cũng giống như chúng tôi đã làm với mã hóa, chúng ta hãy xem một số thuật toán băm phổ biến nhất được sử dụng ngày nay.
- MD4 – MD4 là một thuật toán băm yếu đuối, được tạo ra vào năm 1990, ngay cả người tạo ra nó, Ronald Rivest, thừa nhận nó có vấn đề về bảo mật. Thuật toán băm 128 bit có tác động mặc dù, nó có thể được cảm nhận trong các thuật toán gần đây hơn như WMD5, WRIPEMD và họ WHSA.
- MD5 – MD5 là một thuật toán băm khác do Ray Rivest thực hiện, được biết là vẫn có khá nhiều lỗ hổng. Nó được tạo ra vào năm 1992 như là người kế thừa MD4. Hiện tại MD6 đang hoạt động, nhưng đến năm 2009 Rivest đã loại bỏ nó khỏi sự xem xét của NIST cho SHA-3.
- SHA – SHA là viết tắt của Security Hashing Algorithm và nó có lẽ được biết đến nhiều nhất là thuật toán băm được sử dụng trong hầu hết các bộ mã hóa SSL / TLS. Bộ mật mã là tập hợp các thuật toán mã hóa và thuật toán được sử dụng cho các kết nối SSL / TLS. SHA xử lý các khía cạnh băm. SHA-1, như chúng tôi đã đề cập trước đó, hiện không được chấp nhận. SHA-2 bây giờ là bắt buộc. SHA-2 đôi khi được biết là có SHA-256, mặc dù các biến thể có độ dài bit dài hơn cũng có sẵn.
- RIPEMD – Một họ thuật toán băm mật mã với độ dài 128, 160, 256 và 320 bit. Nó được phát triển theo khuôn khổ EU's Project Ripe bởi Hans Dobbertin và một nhóm các học giả vào năm 1996. Các biến thể 256 và 320 bit của nó không thực sự thêm bất kỳ bảo mật bổ sung nào, chúng chỉ làm giảm khả năng va chạm. Năm 2004, một vụ va chạm đã được báo cáo cho RIPEMD-128, có nghĩa là RIPEMD-160 là thuật toán duy nhất từ gia đình này.
- WHIRLPOOL – Được thiết kế bởi Victor Rijmen (đồng tác giả của thuật toán AES mà chúng tôi đã thảo luận trước đó) và Paulo Barreto vào năm 2000. Kể từ đó nó đã trải qua hai phiên bản. Nó tạo ra các băm 512 bit thường được biểu diễn dưới dạng các số thập lục phân 128 chữ số.
- TIGER – Một thuật toán khá mới bắt đầu thu hút một số lực kéo với các mạng chia sẻ tập tin và các trang torrent. Hiện tại không có cuộc tấn công nào được biết đến có hiệu quả chống lại biến thể 24 vòng đầy đủ của nó.
Salting là gì?
Salting là một khái niệm thường liên quan đến băm mật khẩu. Về cơ bản, đó là một giá trị duy nhất có thể được thêm vào cuối mật khẩu để tạo ra một giá trị băm khác nhau. Điều này thêm một lớp bảo mật cho quá trình băm, đặc biệt là chống lại các cuộc tấn công bạo lực. Một cuộc tấn công bạo lực là nơi một máy tính hoặc botnet cố gắng mọi kết hợp có thể có của các chữ cái và số cho đến khi mật khẩu được tìm thấy.
Dù sao, khi salting, giá trị bổ sung được gọi là "salt".
Ý tưởng là bằng cách thêm một salt vào cuối của một mật khẩu và sau đó băm nó, bạn đã cơ bản phức tạp quá trình bẻ mật khẩu.
Hãy xem một ví dụ nhanh.
Nói mật khẩu tôi muốn salt trông như thế này:
7X57CKG72JVNSSS9
Salt của bạn chỉ là từ SALT
Trước khi băm, bạn thêm SALT vào cuối dữ liệu. Vì vậy, nó sẽ trông như thế này:
7X57CKG72JVNSSS9SALT
Giá trị băm khác với giá trị chỉ dành cho mật khẩu không đồng bộ. Hãy nhớ rằng, ngay cả những thay đổi nhỏ nhất cho dữ liệu được băm sẽ dẫn đến một giá trị băm duy nhất khác nhau. Bằng cách đưa salt vào mật khẩu của bạn, bạn chủ yếu ẩn giá trị băm thực của nó bằng cách thêm một bit dữ liệu bổ sung và thay đổi nó.
Bây giờ, nếu kẻ tấn công bạo lực biết salt của bạn, nó cơ bản vô giá trị. Họ chỉ có thể thêm nó vào cuối mỗi biến thể mật khẩu mà họ đang cố gắng và cuối cùng tìm thấy nó.
Tổng kết
Dưới đây là những gì chúng tôi đề cập trong cuộc thảo luận hôm nay:
- Mã hóa là một hàm hai chiều, trong đó thông tin được tranh giành theo cách sao cho nó có thể bị xáo trộn sau này.
- Hashing là một hàm một chiều trong đó dữ liệu được ánh xạ tới một giá trị độ dài cố định. Hashing chủ yếu được sử dụng để xác thực.
- Salting là một bước bổ sung trong quá trình băm, thường được kết hợp với mật khẩu băm, thêm một giá trị bổ sung vào cuối mật khẩu thay đổi giá trị băm được tạo ra.
(Theo thesslstore)
0 Nhận xét