Bisakah saya menerapkan sumber entropi (lemah) di FPGA?

12

Saya bekerja dengan platform IoT di FPGA untuk evaluasi dan pembuatan prototipe. Saya perlu memberikan dukungan untuk TLS, dan untuk itu saya memerlukan sumber entropi.

Saya mengerti bahwa sumber kebisingan acak yang sebenarnya cukup spesialis (jika bahkan praktis) dalam FPGA, karena kinerja perangkat sering cukup baik (dan sulit untuk menemukan parameter kasus sudut), tetapi saya dapat menerapkan generator urutan pseudo-acak tanpa masalah.

Saya hanya memiliki beberapa saluran I / O standar (UART, I2C, dll), tidak ada yang kelihatannya dapat menyediakan banyak untuk seed PRBS - kecuali mungkin input audio ADC. Apakah mungkin ada trik yang dapat diandalkan untuk menghasilkan entropi dalam FPGA yang harus saya pertimbangkan?

Dengan asumsi bahwa saya menggunakan PRBS, saya berpotensi melampirkan sumber suara eksternal yang tentu saja bisa saya gunakan sebagai seed. Saya tertarik untuk mengetahui berapa banyak ini sebenarnya akan menambah implementasi TLS saya. Apakah ini dapat diandalkan dan aman, atau hanya sedikit lebih baik daripada menggunakan urutan pseudo-acak tetap? Apakah saya perlu terus mengumpulkan sumber kebisingan eksternal untuk lebih banyak entropi?

Tidak apa-apa jika sumber entropi yang saya hasilkan tidak benar-benar aman crypto (karena ini hanya untuk prototipe), tapi saya ingin memahami pertukaran biaya kualitas.

Sean Houlihane
sumber

Jawaban:

6

Apakah kamu perlu? Anda dapat mengimplementasikan generator acak yang aman secara kriptografis jika Anda memiliki dua hal: beberapa penyimpanan aman yang dapat ditulis ulang, dan seed awal. Artinya, cukup untuk menabur RNG satu kali, dan kemudian menyimpan negara dan bekerja dari negara yang disimpan. Ini tidak ideal, akan lebih baik untuk mencampur entropi secara berkala, tetapi tidak apa-apa, terutama untuk protoype pengembangan.

Anda harus memiliki penyimpanan aman yang dapat ditulis ulang. Jika perangkat hanya memiliki ROM dan penyimpanan yang tidak aman, maka pendekatan ini tidak dimungkinkan. Harus ada lokasi di mana Anda dapat menyimpan status RNG sedemikian rupa sehingga musuh Anda tidak dapat membacanya atau memodifikasinya.

Cara kerjanya adalah, saat perangkat melakukan boot, ia memuat status RNG saat ini, dan menggunakannya untuk menghasilkan beberapa byte acak yang cukup untuk dua kali ukuran status RNG. Tulis babak pertama sebagai keadaan RNG yang baru disimpan, dan gunakan babak kedua sebagai keadaan RNG awal untuk sesi saat ini. Dengan PRNG yang aman secara kriptografis, ini menghasilkan PRNG yang aman secara kriptografis. Perhatikan bahwa sangat penting bahwa Anda tidak menggunakan kembali status RNG yang tersimpan, itu sebabnya Anda harus menulis status RNG independen baru sebelum Anda mulai menggunakan RNG.

Injeksi entropi awal dapat terjadi selama manufaktur, atau ketika perangkat diatur. Biasanya hal-hal itu terjadi dengan koneksi ke PC yang dapat menghasilkan entropi atas nama perangkat.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
OK, jadi dalam konteks ini saya tidak berpikir penyimpanan bahkan perlu aman, mengingat model penggunaannya bukan produk konsumen. Setiap penyerang dapat dianggap tidak memiliki akses fisik ke perangkat saya (walaupun mereka mungkin memiliki perangkat yang sama) . Jadi saya tidak bisa mencegah klon.
Sean Houlihane