2013-07-11 28 views

cevap

6

x^yx XOR y, sonuç bit x 1 sahiptir, ve y farklıdır ve 0 bit için de aynıdır: yani

x   = 01010011 
y   = 00010011 
x^y  = 01000000 

^(x^y) Bu reddeder, Eğer aksi takdirde farklı bitlerin için 0 ve 1 olsun:

^(x^y)  = 10111111 => z 

Sonra kendisi tarafından kendi bitlerini maskeleme için sağa z yerini değiştirecek. Bir vites değiştirme sıfır bit sayısı sol tarafını doldurur: sonuca z herhangi bir sıfır yayılan hedefi ile

z >> 4  = 00001011 

, ANDing başlangıç:

z   = 10111111 
z >> 4  = 00001011 
z & (z >> 4) = 00001011 

da taşımak için yeni bir değer kat

z   = 00001011 
z >> 2  = 00000010 
z & (z >> 2) = 00000010 

ayrıca son bit kat:

sağ ve sıfır Başlangıçta x == y varsa Öte yandan , bu böyle gider:
z   = 11111111 
z (& z >> 4) = 00001111 
z (& z >> 2) = 00000011 
z (& z >> 1) = 00000001 

Yani aslında aksi durumlarda 1 x == y 0 döndürür

.

Genellikle, x ve y'nin ikisi sıfırsa, karşılaştırma diğer durumlardan daha az zaman alabilir. Bu işlev, tüm çağrıların, girişlerinin değerlerine bakılmaksızın aynı zamana sahip olmasını sağlamaya çalışır. Bu şekilde, bir saldırgan zamanlama tabanlı saldırıları kullanamaz.

6

Belgelerin tam olarak söylediği gibi yapar: x ve y'nin eşit olup olmadığını denetler. Fonksiyonel bir noktadan sadece x == y, ölü basittir. algoritmalara zamanlama yan saldırıları önlemek bu şifreli bit işe yaramaz-şekilde x == y yapmak

: A x == y daha hızlı gerçekleştirir koduna derlenmiş alabilirsiniz x ise x = y ve daha yavaş olursa = y (veya tersi) nedeniyle! CPU'larda şube tahminine. Bu, bir saldırgan tarafından, kriptografik rutinler tarafından işlenen veriler hakkında bir şeyler öğrenmek ve böylece güvenliği tehlikeye sokmak için kullanılabilir.