Dev / urandom'dan okuma - sistem davranışı

Aug 24 2020

Veya dev/urandomile okurken , elbette çıktının her zaman rastgele ve farklı olması beklenir.headdd

Bu, UNIX tarafından düşük düzeyde nasıl ele alınır? Dosya okurken doğal olarak kesilmiş mi, yoksa dosya aslında simetrik bir şifre veya eşdeğeri için bir arayüz mü ve bu nedenle “okuma” aslında şifrenin çalıştırılması eylemidir.

Yanıtlar

13 StephenKitt Aug 24 2020 at 21:15

/dev/urandombir karakter aygıtıdır, normal bir dosya değildir. Bunu açmak, bir sürücüye, genellikle çekirdekte, okumaları işleyen bir arabirim sağlar; bir program her okuduğunda /dev/urandom, sürücüye bir çağrı yapılır ve sürücü uygun içeriğin nasıl sağlanacağını belirler (diğer herhangi bir karakter aygıtında olduğu gibi - /dev/null, /dev/zero...).

Linux'ta, bu drivers/char/random.c. Çeşitli rastgele veri kaynaklarından başlatılan bir "entropi havuzunu" korur ve okunduğunda, geri döndürülecek verileri oluşturmak için bir ChaCha akış şifresi kullanarak havuz verilerini işler.

8 Ángel Aug 24 2020 at 21:44

/dev/urandom'normal dosya' değil (evet, bu POSIX adıdır), bu bir cihazdır. Tıpkı / dev / üzerindeki çoğu 'dosya' gibi, orada bolca sihir davranışınız var.

  • You have /dev/nullyazdığınız ne kadar olursa olsun, doldurur asla nerede,
  • Her seferinde rastgele farklı veriler sağlayan rastgele / urandom / srandom var
  • /dev/ttyBir terminalle etkileşim kurduğunuz yerde (ve meslektaşlarınız) var
  • Sen sahip /dev/fullherhangi bir yazma attempy için "Cihazda boş alan bıraktı" her zaman hangi döner
  • /dev/zeroSonsuz bir sıfır bayt kümesi döndüren var

ve daha fazlası.

Bu dosyalar aslında bir çekirdek modülüyle etkileşim kurmak için bir arayüzdür. Bu nedenle, onu 'okuduğunuzda', aslında programınızın (head, dd, vb.) Talep ettiği ( /dev/urandombir karakter aygıtıdır) kadar bayt okuması istenen bir işlevi çalıştırır . Bu işlev daha sonra bu tamponu doldurmak için (bu durumda, sözde rasgele içerikleri elde edebilmeniz için) dahili olarak (birkaç entropi havuzuna dayalı olarak) işler.