Password Manager đơn giản chạy trên ESP32 🎃
Khám phá những điều mới mẻ 🎃
Hi anh em dev 👋,
Xem nhiều hơn tại: https://devvui.one
Tình cờ mình nảy ra một ý tưởng khá thú vị, tại sao không biến con ESP32 thành một password manager nhỉ? Thay vì dùng những giải pháp lưu trữ online phổ biến, mình quyết định sử dụng ESP32 để lưu tất cả mật khẩu của mình lại 😎
Với SHA-256 để hash PIN và AES-256 để encrypt passwords, đây là một giải pháp lưu trữ password offline khá an toàn. Cùng tìm hiểu cách implement các tính năng bảo mật trên embedded systems nhé ^^
Mình dùng ESP32C3 nha, hình ảnh em nó đây:
Project này sẽ giúp bạn hiểu được cách implement các tính năng cơ bản của một password manager: lưu trữ có mã hóa, xác thực người dùng và quản lý dữ liệu an toàn.
Tổng quan hệ thống
Project gồm các thành phần chính:
1. Authentication Layer 🔒
- PIN-based authentication với SHA-256 hashing
- Lưu trữ PIN đã hash trong SPIFFS
- Yêu cầu xác thực trước khi truy cập passwords
2. Storage Layer 💾
- Sử dụng SPIFFS (SPI Flash File System)
- JSON format để lưu trữ passwords
- Giới hạn dung lượng và độ dài password
3. Interface Layer 🖥
- Serial Terminal interface
- Command-based interaction
- Error handling và user feedback
Implementation Chi tiết
1. Authentication System
Đầu tiên, mình implement hệ thống xác thực đơn giản dựa trên PIN:
String hashPin(const String &pin)
{
byte shaResult[32];
mbedtls_md_context_t ctx;
mbedtls_md_init(&ctx);
mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), 0);
mbedtls_md_starts(&ctx);
mbedtls_md_update(&ctx, (const unsigned char *)pin.c_str(), pin.length());
mbedtls_md_finish(&ctx, shaResult);
mbedtls_md_free(&ctx);
String hashString = "";
for (int i = 0; i < sizeof(shaResult); i++)
{
char str[3];
sprintf(str, "%02x", (int)shaResult[i]);
hashString += str;
}
return hashString;
}
💡 Mình sử dụng thư viện mbedtls để hash PIN với SHA-256, đảm bảo PIN không được lưu dưới dạng plain text.
2. Password Storage
Passwords được lưu trữ trong một JSON file với format đơn giản:
{
"facebook": "my_password_123",
"github": "super_secret_456",
"gmail": "very_secure_789"
}
Một số giới hạn được áp dụng để bảo vệ bộ nhớ:
- Tên password tối đa 32 ký tự
- Độ dài password tối đa 8000 ký tự
- Tối đa 1000 passwords
- Tổng dung lượng file không quá 100KB
3. Command Interface
ESP32Pass hỗ trợ 5 lệnh cơ bản:
create
: Tạo password mớiget
: Lấy password theo têndelete
: Xóa passwordlist
: Liệt kê tất cả passwordsinfo
: Hiển thị thông tin hệ thống
Ví dụ về luồng tạo password mới:
Enter new PIN > ****
✓ PIN created successfully!
> create
Enter password name > github
Enter password for 'github' > super_secret_456
✓ Password saved successfully!
Như vậy cơ bản là ta đã xây dựng được thiết bị lưu trữ mật khẩu đơn giản với phần cứng nhỏ gọn có thể đem theo mọi lúc, các bạn nghĩ sao về ý tưởng này 😆 Repository phía dưới, code còn hơi cơ bản, có ý tưởng gì các bạn cùng đóng góp nhé 🥰 https://github.com/dongitran/Esp32Pass
Đọc nhiều hơn tại: https://devvui.one
All rights reserved