Мы заметили, что набор из почти 200 000 UUID переиграл два месяца, и мне интересно, видел ли кто-нибудь подобное.Повторяющийся набор UUID от UUID.randomUUID()
UUID генерируются с использованием UUID.randomUUID(). В этом случае (смотря на источник java), randomUUID() использует SecureRandom() под капотом, который, в свою очередь, использует NativePRNG. Я понимаю, что NativePRNG использует/dev/urandom для получения своего семени. Несомненно, подразумевается, что каким-то образом/dev/urandom возвратил одно и то же семя в NativePRNG на два месяца. Из того, что я могу сказать, когда-то созданный экземпляр PRNG не заново семена. Это долго работающая работа, которая прослушивает сообщения и использует UUID в качестве идентификатора для нее. Псевдокод просто:
< receive message> String uuid = UUID.randomUUID().toString(); String fname = h.composeArtifact(uuid);
ОС Centos 6, на экземпляре AWS EC2 работает JDK1.6. Это что-то, что кто-либо видел/переживал в прошлом? Похоже на то, что должно «никогда не происходить» ...
Я не уверен, что это вопрос безопасности, но вопрос о внутренней структуре Java. – schroeder
Были ли они созданы из недавно созданного экземпляра в обоих случаях? – SilverlightFox
Что делать, если какое-либо внутреннее хранилище, используемое для хранения этого 'UUID seed' thingy, является файлом, который управляется через Chef/Puppet/часть моментального снимка VM?Я думаю, что это законно спросить, как это предположительно уникальное семя хранится и управляется, и есть ли вероятность того, каким образом ОС удалось заставить его быть сброшенным до прошлого значения. Столь же интересен вопрос о том, может ли PRNG, используемый в Java, превзойти небольшое подмножество значений, как часто и как злоумышленник обнаружит это. –