Thư viện mã hóa cho Arduino


9

Tôi đang sử dụng Arduino để đọc bàn phím và mở một cuộc tấn công điện khi nhập mã PIN của bàn phím. Đối với bản phác thảo này, tôi muốn sử dụng một số loại mã hóa nhẹ để lưu trữ mã PIN trong EEProm. Có ai biết về một thư viện như vậy? Tôi đã nghe nói có thể có thể sử dụng TwoFish.

Câu trả lời:


12

Bạn không muốn mã hóa mật khẩu (PIN) - bạn muốn băm chúng. Khi ai đó nhập mật khẩu, bạn băm mật khẩu đó và so sánh hàm băm với hàm băm được lưu trữ. Ưu điểm của phương pháp này (được sử dụng trong hơn 30 năm) là ngay cả khi ai đó nắm giữ nguồn và băm, họ vẫn không thể biết mã PIN nào khớp với băm, miễn là bạn chọn hàm băm đủ mạnh .

Bạn không muốn tự mình thực hiện mã hóa - bạn muốn sử dụng thư viện của người khác, đặc biệt là thư viện có triển khai mở đã được thử nghiệm bởi một cộng đồng lớn. Mã hóa là khó, kiểm tra là khó và kiểm tra mã hóa là khó khăn, vì vậy hãy nhờ người khác làm điều đó cho bạn.

Bạn nên kiểm tra Thư viện tiền điện tử AVR , được cấp phép với GPLv3. Ngoài ra còn có một triển khai Skein cho AVR .


1
Upvote - Một tài nguyên tốt, và điều này nên được đặt làm câu trả lời cho câu hỏi.
Lou

9

Liên kết mà Hristos đã đăng, trong khi có thể hữu ích, chắc chắn không được tính là "mã hóa". Nó thực sự chỉ là "obfuscation".

Mật mã học đúng là nổi tiếng dễ bị sai, ngay cả đối với những người biết toán học.

Đáp lại bài đăng gốc - các phương thức tấn công nào sẽ cho phép ai đó có quyền truy cập vào mã PIN trong EEProm? Chắc chắn nếu họ đã có xa vào thiết bị điện tử của bạn mà họ chỉ có thể "snip dây đỏ" và mở cửa?

Nếu bạn nào đó làm có một hệ thống nơi những kẻ tấn công có thể được giữ trong những nội dung mà không cần EEProm đã có đủ quyền truy cập vào mở cửa của bạn, có thể bạn muốn thiết kế lại nó. Bạn có thể xem các hàm băm một chiều tương tự như băm mật khẩu Unix - theo cách đó EEProm không cần chứa khóa giải mã - vấn đề là không gian tìm kiếm mã PIN rất nhỏ - nếu tôi có thể tải xuống phiên bản băm của PIN, tôi có thể nhanh chóng thử tất cả 10.000 mã PIN có thể, tôi nghi ngờ bất kỳ máy tính xách tay hiện đại nào cũng sẽ chạy tất cả chúng trong vài giây.


Tôi đồng ý (và đã đồng ý ở trên), hàm băm một chiều sẽ hữu ích và nếu bạn đang lập trình hệ thống thì bạn có thể tạo mã pin miễn là bạn muốn, ví dụ 8 chữ số cho 100 000 000 kết hợp, sẽ mất nhiều thời gian hơn.
A-mốt

1

Vấn đề tôi thấy là nếu họ có thể nhìn thấy ghim của bạn thì họ cũng có thể thấy chương trình của bạn mã hóa / kiểm tra / giải mã ghim của bạn. Ngoài ra, nếu họ có chip của bạn, họ có thể không chỉ thay đổi chương trình để luôn cho kết quả khả quan (bỏ qua kiểm tra một cách hiệu quả) cho bất kỳ mã pin nào được nhập.


1

Làm thế nào để bạn có kế hoạch giải mã mã PIN được mã hóa, để kiểm tra xem người dùng đã nhập mã PIN hợp lệ chưa? Bạn sẽ cần lưu trữ khóa giải mã ... tại thời điểm đó nếu kẻ tấn công có thể đọc eeprom của bạn, anh ta cũng có thể đọc đèn flash của bạn để tìm khóa mã hóa. Về cơ bản kết xuất toàn bộ mã hóa của bạn hoàn toàn vô dụng. Cũng như những người khác nói, nếu anh ta đã có khả năng đọc chip của bạn, anh ta có thể viết một chương trình mới. Đơn giản hơn nhiều khi chỉ cần mở cửa, tôi nghi ngờ bất cứ ai cũng sẽ gặp rắc rối khi cố gắng hack chip của bạn.


1

Đây là một phương pháp mã hóa đơn giản trong C có thể dễ dàng chuyển sang Arduino. Đây có vẻ như là cách dễ nhất để mã hóa dữ liệu với tài nguyên hạn chế của arduino.

-EDIT- Để giữ khóa ngoài chương trình, bạn có thể tạo một nửa số PIN làm khóa. Điều này có nghĩa là chương trình của bạn lấy một nửa mã PIN để giải mã 1/2 PIN được mã hóa được lưu trữ trong EEProm. Nếu khóa được giải mã từ EEProm khớp với phần pin của bạn không phải là khóa, cửa sẽ mở khóa. Điều này sẽ chỉ hoạt động trong một tình huống mà những kẻ xâm nhập không thể phá cửa hoặc lập trình lại Arduino.


Nhưng nếu họ không có quyền truy cập vào chip của bạn, bạn không cần mã hóa mã pin.
A-mốt

1

Tôi ghét không trả lời câu hỏi trong khi hỏi người khác, nhưng ...

Có một số lý do tại sao thiết bị của bạn không phải là bằng chứng giả mạo? Tôi đã thấy các công tắc nút nhấn trong các lỗ vít được triển khai 'trên băng ghế' để phát hiện loại giả mạo mà bạn đang lo lắng. Sau đó .. đến đây, đứa trẻ với một ngọn đuốc siêu nhỏ butan quản lý để lấy chip của bạn mà không cần tháo bất cứ thứ gì (hoặc làm hỏng chip) .. bằng cách nào đó, anh ta biết thiết kế của hệ thống chống giả mạo của bạn (hy vọng) bao gồm cả việc phát hiện các thay đổi trong ánh sáng xung quanh và / hoặc âm thanh. Khi vỏ bọc tắt, cả hai trở nên khá khác nhau .. ngày hay đêm.

Nếu đó là trường hợp, nó phải là một hệ thống gồm hai phần trong đó các phần được phơi bày giao tiếp với một cái gì đó nơi mã hóa được thực hiện dễ dàng hơn. Thêm vào đó, tổng kiểm tra (trợ giúp) cho đứa trẻ với ngọn đuốc.

Tôi nghĩ rằng bạn đang yêu cầu một tuốc nơ vít là một cái búa.


1

Những ý kiến ​​này là thực sự tại chỗ. Không có gì sai khi cố gắng thử nghiệm để tìm hiểu về mã hóa, nhưng đây thực sự không phải là một dự án tốt để học những thứ như vậy. Bạn thực sự muốn có một cuốn sách giáo khoa tốt và một máy tính, và như @bigiain nói, toán học nổi tiếng là dễ bị sai.

Để hiểu rõ hơn về cách mã hóa hoạt động và những gì bạn đang chống lại, Sổ tay Mật mã học ứng dụng là tuyệt vời và miễn phí:

Nếu bạn chỉ muốn bảo mật dự án của mình, đây là một cách làm không hiệu quả. Nếu bạn quan tâm đến mật mã, hãy bắt đầu với cuốn sách này và một máy tính.


Tôi hiểu mật mã, đọc Bruce Schneier và đã lập trình được hơn hai mươi năm. Tôi hiểu mối đe dọa thực sự là chỉ cần phá cửa và đi qua bất kỳ loại điều khiển Arduino nào. Tôi chỉ không thể có lương tâm tốt cài đặt nó với mã PIN văn bản rõ ràng trong EEProm nếu có thể tránh được. Bay

Có bất kỳ phương pháp che giấu đơn giản nào cũng có hiệu quả trong vai trò này nếu bạn muốn tránh lưu trữ mã PIN rõ ràng. Những người trả lời ở trên chỉ cố gắng giúp bạn hiểu những gì mật mã làm và không làm. Đây là thư viện AES: hoozi.com/Articles/AESEncrypt.htmlm Tôi cũng muốn nói rằng chỉ vì bạn đã lập trình được 20 năm, điều đó không có nghĩa là bạn "hiểu" mật mã. Đó là một lĩnh vực hoàn toàn khác. Một thợ sửa xe 20 năm là một người lành nghề, nhưng tôi sẽ không mong đợi anh ta thiết kế một chiếc xe buýt CAN từ đầu. Kiểm tra thái độ của bạn, xin vui lòng.
Lou

Trời ơi ... 20 năm mã hóa và bạn nghĩ có thể mã hóa dữ liệu thời gian chạy ????? Thoát
MickLH
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.