kiến thức Phân biệt Encrypt và Hashing

  • Người tạo chủ đề Người tạo chủ đề Duy1122
  • Ngày bắt đầu Ngày bắt đầu

Duy1122

Junior Member
Phân biệt Encrypt và Hashing

Trong lĩnh vực bảo mật dữ liệu, hai khái niệm "Encrypt" (mã hóa) và "Hashing" (băm) thường được nhắc đến như những phương pháp bảo vệ thông tin quan trọng. Tuy nhiên, chúng có mục đích và cơ chế hoạt động hoàn toàn khác nhau. Để hiểu rõ hơn, chúng ta hãy cùng phân biệt giữa mã hóa và băm.

Encrypt (Mã hóa)
Mã hoá là quá trình chuyển đổi dữ liệu dạng gốc (plaintext) sang thành một dạng khác không thể đọc được (ciphertext) để bảo vệ dữ liệu khỏi sự truy cập trái phép.
Cơ chế hoạt động:
  • Sử dụng các thuật toán mã hoá và một khoá để chuyển dữ liệu plaintext thành ciphertext.
  • Quá trình mã hoá có thể được đảo ngược (giải mã) để khôi phục lại dữ liệu gốc bằng cách sử dụng khoá giải mã.
Mã hoá dữ liệu có hai loại chính là mã hoá đối xứng (Symmetric encryption) và mã hoá bất đối xứng (Asymmetric encryption).
  1. Symmetric encryption:
  • Sử dụng một khóa (key) cho cả quá trình mã hóa (encoding) và giải mã (decoding).
  • Quản lý khoá:
    • Shared Key (Khóa chia sẻ): Tất cả các bên tham gia vào quá trình truyền thông phải sử dụng cùng một khóa. Khóa này phải được giữ bí mật và chia sẻ an toàn giữa các bên.
  • Ưu điểm:
    • Nhanh và hiệu quả hơn
    • Tốt cho việc mã hoá dữ liệu số lượng lớn
  • Nhược điểm:
    • Quản lý khóa khó khăn, đặc biệt là có nhiều người dùng và thiết bị
    • Nếu khoá bị lộ, thì hacker có thể giải mã toàn bộ dữ liệu
  • Ví dụ thuật toán:
    • AES (Advanced Encryption Standard)
    • DES (Data Encryption Standard).
  1. Asymmetric encryption:
  • Sử dụng cặp khóa công khai (Publish key) và khóa bí mật (Private key); Khóa công khai để mã hoá, khoá bí mật để giải mã.
  • Quản lý khoá:
    • One per user (Khóa riêng cho mỗi người dùng): Mỗi người dùng có một cặp khóa riêng của mình. Khóa công khai có thể được chia sẻ rộng rãi, nhưng khóa riêng tư phải được giữ bí mật.
  • Ưu điểm:
    • Bảo mật hơn đối với việc truyền khoá, vì khóa công khai có thể được chia sẻ công khai
    • Giải quyết được vấn đề phân phối khoá
  • Nhược điểm:
    • Chậm hơn symmetric encryption
    • Không phù hợp với mã hoá dữ liệu số lượng lớn do hiệu xuất thấp
  • Ví dụ thuật toán:
    • RSA (Rivest-Shamir-Adleman)
    • ECC (Elliptic Curve Cryptography).
Ứng dụng: Bảo vệ dữ liệu truyền tải và lưu trữ (Thông tin nhạy cảm như số thẻ thanh toán)

Hashing (Băm)
Hashing là quá trình chuyển đổi dữ liệu từ dạng gốc thành một giá trị băm cố định. Hashing là quá trình một chiều, nghĩa là không chuyển về dữ liệu gốc từ giá trị băm (Khác với Encrypt có thể đổi ngược).
Với một dữ liệu gốc sẽ tạo ra một giá trị băm nhất định, chính vì vậy khi dùng hash mật khẩu lưu vào database thì hacker có thể dùng rainbow table để dò giá trị băm và tìm được dữ liệu gốc. Vì vậy khi thực hiện hash mật khẩu ta cần thêm Salt ngoài ra còn có Pepper, KDF (Key Derivation Function):.
  1. Salt
  • Salt là một giá trị ngẫu nhiên, được thêm vào mật khẩu trước khi thực hiện băm.
  • Salt đảm bảo rằng mỗi mật khẩu, ngay cả giống nhau cũng sẽ cho ra giá trị băm khác nhau.
  • Điều này làm cho rainbow table gần như vô dụng vì hacker phải tạo rainbow table riêng cho mỗi giá trị salt với kích thước vô cùng lớn
Mã:
async function hashPassword(password) {
    const salt = await bcrypt.genSalt(saltRounds);
    const hashedPassword = await bcrypt.hash(password, salt);
    return hashedPassword;
}
  1. Pepper
  • Pepper là một giá trị bí mật, giống như salt, được giữ bí mật và thêm vào mật khẩu trước khi băm.
  • Pepper thường lưu vào các biến môi trường trên máy chủ.
Mã:
async function hashPassword(password) {
    const salt = await bcrypt.genSalt(saltRounds);
    const hashedPassword = await bcrypt.hash(password + pepper, salt);
    return { salt, hashedPassword };
}
  1. KDF (Key Derivation Function)
  • Các thuật toán như bcrypt, scrypt và Argon2 chính là các KDF mạnh mẽ và an toàn cho băm mật khẩu.
  • Chúng dùng salt và thực hiện nhiều vòng băm để cho quá trình phá mã trở nên tốn kém hơn về thời gian và tài nguyên
Thuật toán băm phổ biến:
  • MD5 (Message Digest Algorithm 5)
  • SHA-256 (Secure Hash Algorithm 256)
  • Bcrypt, Scrypt, Argon2 (các thuật toán băm mật khẩu an toàn).
  • Ứng dụng : Lưu trữ mật khẩu an toàn, kiểm tra tính toàn vẹn của dữ liệu

Khi nào nên sử dụng Encrypt và Hashing?
  • Encrypt: Khi bạn cần bảo vệ dữ liệu trong quá trình truyền tải hoặc lưu trữ và cần khả năng giải mã để truy cập dữ liệu gốc. Ví dụ: bảo vệ dữ liệu cá nhân, thông tin tài chính, truyền tải dữ liệu qua mạng.
  • Hashing: Khi bạn cần đảm bảo tính toàn vẹn của dữ liệu hoặc lưu trữ mật khẩu an toàn. Ví dụ: lưu trữ mật khẩu người dùng trong cơ sở dữ liệu, kiểm tra dữ liệu tải về có bị thay đổi hay không.
Tổng kết
Cả mã hóa và băm đều là những công cụ quan trọng trong bảo mật thông tin, nhưng chúng phục vụ các mục đích khác nhau và có các cơ chế hoạt động khác nhau. Hiểu rõ sự khác biệt giữa chúng sẽ giúp bạn lựa chọn phương pháp phù hợp để bảo vệ dữ liệu của mình một cách hiệu quả.
Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về mã hóa và băm, cũng như cách chúng được sử dụng trong bảo mật thông tin. Nếu bạn có bất kỳ câu hỏi hay thắc mắc nào, đừng ngần ngại để lại bình luận bên dưới!
 
Topic khá hay đó chủ thớt.
Các thuật toán Hashing có đảm bảo được 2 giá trị gốc khác nhau luôn có kết quả hash khác nhau không thím
 
Sửa lần cuối:
Topic khá hay đó chủ thớt.
Các thuật toán Hashing có đảm bảo được 2 giá trị gốc khác nhau luôn có kết quả hash khác nhau không thím
Không thím. Hàm băm tốt là hàm băm ít xảy ra đụng độ, chứ việc không có đụng độ là không thể.
Thím đọc thêm về hiện tượng đụng độ(collision) và nguyên lý chuồng bồ câu nhé.
 
Không thím. Hàm băm tốt là hàm băm ít xảy ra đụng độ, chứ việc không có đụng độ là không thể.
Thím đọc thêm về hiện tượng đụng độ(collision) và nguyên lý chuồng bồ câu nhé.
T biết là có collision rồi, thì thằng Map nó mới có list để lưu lại value khi có collision. Thấy thím thớt bảo dùng hashing password thì t đang lo case đó @@
 
T biết là có collision rồi, thì thằng Map nó mới có list để lưu lại value khi có collision. Thấy thím thớt bảo dùng hashing password thì t đang lo case đó @@
Lý thuyết là sẽ có đụng độ, các hàm băm cũ cũng đã từng xảy ra tấn công đụng độ.
Nhưng thực tế giờ các hàm băm có input cực lớn, cùng việc thực thi lại hàm băm đó N lần thì việc đụng độ gần như là không thể xảy ra. Ví dụ SHA-256, nó có 256bit, nên cần thực hiện 2^128 hàm băm để có thể có đụng độ. 2 ^ 128 ~ 3.4 x 10^38. Con số thiên văn như thế này gần như là không tưởng cho mọi cơ sở dữ liệu :oh:
 
Lý thuyết là sẽ có đụng độ, các hàm băm cũ cũng đã từng xảy ra tấn công đụng độ.
Nhưng thực tế giờ các hàm băm có input cực lớn, cùng việc thực thi lại hàm băm đó N lần thì việc đụng độ gần như là không thể xảy ra. Ví dụ SHA-256, nó có 256bit, nên cần thực hiện 2^128 hàm băm để có thể có đụng độ. 2 ^ 128 ~ 3.4 x 10^38. Con số thiên văn như thế này gần như là không tưởng cho mọi cơ sở dữ liệu :oh:
Hơi sai sai, tỷ tệ đụng độ là p^2/(2^256) thím à, p là số lần hash sha256 =))
 
Đó là tỷ lệ đụng đọ của sha256 theo doc của nó đấy, k phải t tự tưởng ra đâu :LOL:
À vừa đọc lại, 2^128 là số lần băm cần thiết để có 50% xác suất đụng độ cho SHA-256
Mà đọc thì có vẻ công thức của thím cũng ko đúng. ~ p^2/(2n) mới chuẩn. :doubt:
 
Topic khá hay đó chủ thớt.
Các thuật toán Hashing có đảm bảo được 2 giá trị gốc khác nhau luôn có kết quả hash khác nhau không thím
MD5 thì ko đảm bảo, hiện tại có rất nhiều giá trị va chạm được tìm ra
SHA256 thì nhân loại chưa tìm ra được 2 input nào xảy ra va chạm hash, mặc dù trên lý thuyết thì 100% là có vô số khả năng xảy ra
----
Hiện tại giới khoa học chỉ ra phương án phá SHA256 cũng như RSA256 thì chỉ có máy tính lượng tử (trong tương lai) mới đủ khả năng
 
Password thì ko ai đi hash cả, mà sẽ encrypt, 1 thuật toán hay dùng là bcrypt, 2 password giống nhau ko có nghĩa là encrypted password sẽ giống nhau.
Cái này mình nhầm ở chỗ là password cũng sẽ dùng hashing algorithm nhưng salt là random, còn encrypt thì chỉ là hiding sensitive data, encrypt cũng dùng hashing algorithm nhưng khác cái là có cách giải mã để decrypt.
Hashing thì 2 password giống nhau sẽ cho ra 1 hashed password giống nhau, về secuiry thì nó ko có giá trị gì cả, đừng nhầm lẫn.
Hashing nó ko có nghĩa gì về security cả, chỉ là cách để transform 1 cái key về 1 cái key khác để có thể truy xuất data nhanh hơn như là hashset + dictionary thôi.
Hashshing nó sẽ đụng độ, lúc này nếu có 2 key trùng sẽ phải xử lí. Bằng cách link 2 data trùng key vô 1 bucket

via theNEXTvoz for iPhone
 
Sửa lần cuối:
Password thì ko ai đi hash cả, mà sẽ encrypt, 1 thuật toán hay dùng là bcrypt, 2 password giống nhau ko có nghĩa là encrypted password sẽ giống nhau.
Hashing thì 2 password giống nhau sẽ cho ra 1 hashed password giống nhau, về secuiry thì nó ko có giá trị gì cả, đừng nhầm lẫn.
Hashing nó ko có nghĩa gì về security cả, chỉ là cách để transform 1 cái key về 1 cái key khác để có thể truy xuất data nhanh hơn như là hashset + dictionary thôi.
Hashshing nó sẽ đụng độ, lúc này nếu có 2 key trùng sẽ phải xử lí. Bằng cách link 2 data trùng key vô 1 bucket

via theNEXTvoz for iPhone
bạn lầm rồi, mình chưa thấy công nghệ nào lại đi encrypt password cả
pass "123456" khi bạn encrypt thì sẽ ra "djse989" chẳng hạn, và về mặt khái niệm kỹ thuật thì từ "djse989" sẽ decrypt ra lại thành "123456"
Còn hash thì không có khái niệm giải ngược như vậy đâu nhé, muốn phá thì bạn phải đi "vét cạn", và về mặt lý thuyết thì đây là 1 phương trình có vô số nghiệm, nhưng để tìm ra 1 nghiệm thì là là vô cùng khó

1 thuật toán hay dùng là bcrypt
Cốt lõi của nó chính là Hash đó bạn
- Bcrypt tự động thêm một giá trị salt vào mật khẩu trước khi băm để bảo vệ chống lại các cuộc tấn công bằng rainbow table.
 
Sửa lần cuối:
bạn lầm rồi, mình chưa thấy công nghệ nào lại đi encrypt password cả
pass "123456" khi bạn encrypt thì sẽ ra "djse989" chẳng hạn, và về nguyên tắc thì từ "djse989" sẽ decrypt ra lại thành "123456"
Còn hash thì không có khái niệm giải ngược như vậy đâu nhé, muốn phá thì bạn phải đi "vét cạn"
Ừ chắc mình bị conflict giữa 2 khái niệm encrypt với hash rồi, tự gạch. Mình nghĩ encrypt là dùng dynamic salt còn hash là dùng 1 fixed salt.
Hash thì lúc nào cũng cần salt, như password với bcrypt thì salt là random, còn các thuật toán hashing thông thường thì chỉ cần 1 cái fixed salt.
Còn encrypt theo khái niệm đơn giản chỉ là hash với fixed salt để giải mã thôi nhỉ.
 
Ừ chắc mình bị conflict giữa 2 khái niệm encrypt với hash rồi, tự gạch. Mình nghĩ encrypt là dùng dynamic salt còn hash là dùng 1 fixed salt.
Hash thì lúc nào cũng cần salt, như password với bcrypt thì salt là random, còn các thuật toán hashing thông thường thì chỉ cần 1 cái fixed salt.
Còn encrypt theo khái niệm đơn giản chỉ là hash với fixed salt để giải mã thôi nhỉ.
Không bạn, quá trình mã hóabăm là 2 quá trình khác nhau, và chúng ko có ràng buộc phụ thuộc gì nhau cả, mục đích của chúng nó sinh ra cũng khác nhau luôn
 
Đang làm low level dev cho mấy cái Hash, Crypto (sym, asym) đau hết cả não :ah: .
Hash luôn luôn là 1 chiều và không cần "key"và output luôn luôn là 1 giá trị cố định (dựa vào thuật toán) bất chấp đầu vào.
Combo hash + asym sẽ ứng dụng 1 cái rất hay là Digital Signature. Kết hợp với Certificate :sexy_girl:
 
Anh em cho hỏi chút về lấy dữ liệu, mình đang cần lấy dữ liệu giá chứng khoán từ web Bảng giá trực tuyến - S24 MBS (https://s24.mbs.com.vn/)
Web này dùng websocket mqtt, bình thường nếu api chính thức thì bên cung cấp gửi cho mình giải mã protobuf để decode. Trường hợp web như thế này có cách nào mò ra đc code giải mã ko anh em?
thím mò đc thì nó encode chi cho mất công :D
À vừa đọc lại, 2^128 là số lần băm cần thiết để có 50% xác suất đụng độ cho SHA-256
Mà đọc thì có vẻ công thức của thím cũng ko đúng. ~ p^2/(2n) mới chuẩn. :doubt:
2n thì SHA256 nó hash vài lần là có va chạm à fen :canny:
 
Theo mảng crypto có cơ hội nghề nghiệp gì không các bác nhỉ, em sv attt
 
Đang làm low level dev cho mấy cái Hash, Crypto (sym, asym) đau hết cả não :ah: .
Hash luôn luôn là 1 chiều và không cần "key"và output luôn luôn là 1 giá trị cố định (dựa vào thuật toán) bất chấp đầu vào.
Combo hash + asym sẽ ứng dụng 1 cái rất hay là Digital Signature. Kết hợp với Certificate :sexy_girl:
Sao lại luôn là giá trị cố định bất chấp đầu vào? Chắc thím đang nói nó luôn cho ra output có chiều dài cố định bất chấp độ dài input.
 

Thống kê chủ đề

Ngày tạo
Duy1122,
Người trả lời cuối
thanhdaica,
Trả lời
43
Lượt xem
6.827
Quay lại
Lên đầu trang