Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

So sánh các chuỗi trong MySQL có dễ bị tấn công định thời không?

Đúng, so sánh chuỗi (và / hoặc tra cứu chỉ mục) về nguyên tắc có thể làm rò rỉ bao nhiêu byte đầu giống hệt nhau mà băm mật khẩu được lưu trữ trong cơ sở dữ liệu và một byte được tính từ chia sẻ mật khẩu đã nhập.

Về nguyên tắc, kẻ tấn công có thể sử dụng điều này để tìm hiểu lặp đi lặp lại một tiền tố của mã băm mật khẩu, từng byte:đầu tiên chúng tìm một mã băm chia sẻ byte đầu tiên của nó với mã băm trong cơ sở dữ liệu, sau đó tìm một mã băm chia sẻ đầu tiên hai byte, v.v..

Không, điều này gần như chắc chắn sẽ không thành vấn đề.

Tại sao? Chà, vì một số lý do:

  1. Một cuộc tấn công định thời có thể cho phép kẻ tấn công tìm hiểu một phần băm mật khẩu của người dùng. Một lược đồ băm mật khẩu được thiết kế tốt (sử dụng muối và kéo dài khóa ), tuy nhiên, vẫn phải bảo mật (tất nhiên, giả sử rằng bản thân mật khẩu không dễ đoán được) ngay cả khi kẻ tấn công biết toàn bộ mật khẩu băm. Do đó, ngay cả khi cuộc tấn công định thời thành công, bản thân mật khẩu sẽ an toàn.

  2. Để thực hiện cuộc tấn công, kẻ tấn công phải gửi mật khẩu có giá trị băm mà chúng biết. Giá trị băm phụ thuộc vào muối. Do đó, trừ khi kẻ tấn công bằng cách nào đó đã biết muối, thì cuộc tấn công này không thể thực hiện được.

    (Đúng là, trong hầu hết các phân tích bảo mật về các kế hoạch băm mật khẩu, muối được giả định là thông tin công khai. Tuy nhiên, điều này chỉ là do các phân tích như vậy giả định tình huống xấu nhất đã đề cập ở trên, khi kẻ tấn công đã lấy được bản sao của toàn bộ cơ sở dữ liệu người dùng, các muối và hàm băm và tất cả. Nếu kẻ tấn công chưa biết hàm băm, không có lý do gì để cho rằng chúng sẽ biết muối.)

  3. Ngay cả khi kẻ tấn công biết muối, để thực hiện cuộc tấn công lặp đi lặp lại được mô tả ở trên, chúng sẽ cần tạo mật khẩu băm thành một giá trị với tiền tố mong muốn. Đối với bất kỳ hàm băm an toàn nào, cách thực tế duy nhất để thực hiện điều này là thử một lỗi, có nghĩa là thời gian cần thiết để làm như vậy sẽ tăng theo cấp số nhân với độ dài của tiền tố.

    Điều này có nghĩa là trong thực tế, để trích xuất đủ nhiều bit của băm để có thể thực hiện một cuộc tấn công bạo lực ngoại tuyến chống lại nó (không nhất thiết phải là tất cả chúng; chỉ cần nhiều hơn lượng entropy hiệu quả trong mật khẩu), kẻ tấn công cần thực hiện nhiều tính toán theo yêu cầu để bẻ khóa chính mật khẩu đó. Đối với một lược đồ băm mật khẩu được thiết kế tốt và một mật khẩu được chọn an toàn, điều này là không khả thi.

  4. Cuộc tấn công lặp đi lặp lại có thể là gì Về nguyên tắc, cung cấp cho kẻ tấn công khả năng thực hiện hầu hết các phép tính cục bộ cục bộ ở cuối của chúng, trong khi chỉ gửi một số lượng khá nhỏ mật khẩu vào hệ thống của bạn. Tuy nhiên, ngay cả điều này cũng chỉ đúng nếu họ nhận được thông tin thời gian chi tiết và đáng tin cậy từ từng mật khẩu đã được gửi. Trên thực tế, các cuộc tấn công theo thời gian thực cực kỳ kém hiệu quả và yêu cầu nhiều (thường là hàng nghìn hoặc hàng triệu) truy vấn để mang lại bất kỳ thông tin hữu ích ở tất cả. Điều này rất có thể sẽ hủy bỏ bất kỳ lợi thế hiệu suất tiềm năng nào mà cuộc tấn công định thời có thể cung cấp cho kẻ tấn công.

    Điểm này được khuếch đại khi bạn sử dụng một sơ đồ băm mật khẩu kéo dài khóa thích hợp, vì những sơ đồ như vậy được cố ý thiết kế để làm chậm. Do đó, việc so sánh chuỗi trong cơ sở dữ liệu có thể sẽ mất một khoảng thời gian không đáng kể so với việc băm mật khẩu ngay từ đầu và bất kỳ biến thể thời gian nào do nó gây ra sẽ bị mất trong nhiễu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lưu trữ các giá trị NULL trong các trường datetime trong MySQL?

  2. MySQL- Tại sao LAST_INSERT_ID () không hoạt động với tôi?

  3. Cài đặt Máy chủ Web trong FreeBSD 6.0 với Apache 2.2, MySQL 5.0 và PHP 5 - Phần 3

  4. Kết nối Mysql Tomcat 7 trên Openshift

  5. MySql - tính toán chênh lệch thời gian cho nhiều hàng