Git'de sabit zaman dizisi karşılaştırması yapmanın yerleşik bir yolu mu?Git İçinde Dizeleri Güvenli Karşılaştır
Bu işlevselliğe Ruby uygulamasında ihtiyaç duyduğumda Devise.secure_compare
yöntemini kullandım.
Git'de sabit zaman dizisi karşılaştırması yapmanın yerleşik bir yolu mu?Git İçinde Dizeleri Güvenli Karşılaştır
Bu işlevselliğe Ruby uygulamasında ihtiyaç duyduğumda Devise.secure_compare
yöntemini kullandım.
Dizeler için değil, []byte
için. ,
func ConstantTimeCompare(x, y []byte) int
ConstantTimeCompare iki eşit uzunlukta dilimleri, x ve y, ancak ve ancak 1 döndürür eşit içeriğe sahiptir: Özellikle
ConstantTimeCompare
crypto/subtle
bakınız. Alınan süre dilimlerin uzunluğunun bir fonksiyonudur ve içerikten bağımsızdır. Eğer, kolayca bir bayt dilime bir dize dönüştürebilirsiniz Bildiğiniz gibi
:
var x []byte = []byte("someString")
Ayrıca 'subtle.ConstantTimeCompare' 'iki eşit uzunluklu dilime' ihtiyaç duyduğu uyarılar nedeniyle dilimlerin uzunluklarını karşılaştırmak için 'subtle.ConstantTimeEq' kullanmak da önemlidir. Aksi takdirde bazı "ince" davranışa sahiptir. Örnek: http://play.golang.org/p/Xga-wsZvhT – Intermernet
Yukarıdaki örnekte (http://play.golang.org/p/Xga-wsZvhT) davranış doğru görünüyor. Eşit uzunlukta olmayan dilimler eşit değildir. – stevvooe
secure_compare sabit zaman yöntemi değildir, bu dizede her byte üzerinde dolaşır each_byte, aramalar http://apidock.com/ruby/String/each_byte –
"Sabit zaman" ve "güvenli" çok farklı hedeflerdir; lütfen tam olarak ne istediğini netleştirin – Vitruvius
@SethHoenig Zamanlama saldırıları bağlamında. Sabit zaman karşılaştırması zaman karmaşıklığı ile ilgili değildir ve sadece bir fark bulunduğunda karşılaştırma fonksiyonunun erken dönmediği anlamına gelir (bu da girdilerin ne kadar farklı olduğu hakkında bilgi sızdırmaz). Karşılaştırma işlevi daha sonra, içeriğe değil, yalnızca girdilerin uzunluğuna bağlıdır. – nemo