Simple Power Analysis¶
SPA (Kocher, Jaffe & Jun, CRYPTO 1999), key-dependent operasyonları görsel olarak ayırt ederek secret'ları tek bir ya da birkaç power trace'inden doğrudan okur — klasik olarak RSA modular exponentiation'da square vs. multiply.
Mechanism¶
Bir CMOS cihazının anlık power çekişi ne yaptığına bağlıdır: farklı instruction'lar ve aynı instruction'ın farklı veri üzerinde çalışması, farklı sayıda transistor'u anahtarlar. Eğer bir kriptografik rutinin gerçekleştirdiği operasyon dizisi kendisi secret-dependent ise, o zaman power trace — zamana karşı akımın grafiği — secret'ın doğrudan bir resmidir.
Note
SPA'nın suistimal ettiği invariant şu: secret-dependent control flow power üzerinden sızar. Kanonik örnek olarak, ders kitabındaki "square-and-multiply" modular exponentiation exponent'i bit bit tarar: her zaman square yapar, ama yalnızca mevcut exponent biti 1 olduğunda fazladan bir multiply yapar. Squaring ve multiplication'ın ayırt edilebilir power signature'ları vardır (farklı süreler/tepeler), bu yüzden tek bir trace, her exponent biti için square'in ardından bir multiply gelip gelmediğini gösterir — özel RSA exponent'i d'yi doğrudan okur. Aynı mantık herhangi bir key-dependent branch, table lookup ya da conditional subtraction için geçerlidir (örn. DES key schedule'da ya da modular reduction'da). SPA istatistik gerektirmez: gürültüden bir sinyali çekip çıkarmak için binlerce trace üzerinde correlation kullanan ../sidechannel/differential-power-analysis.md'in aksine, SPA, operasyon başına fark noise floor'u aştığında key'i bir ya da birkaç trace'in görsel incelemesiyle kurtarır.
Walkthrough¶
- Power'ı enstrümante et. Cihazın ground/supply hattına küçük bir shunt resistor yerleştir ve target tek bir özel-key operasyonu (bir RSA signature/decryption) yaparken voltaj düşüşünü bir oscilloscope ile yakala.
- Bir trace al. Tam modular exponentiation'ı kapsayan tek, yüksek çözünürlüklü bir trace kaydet.
- Round'lara böl. Tekrarlanan bit-başına pattern'i tespit et. Her iterasyon bir squaring ile başlar; soru, ardından bir multiply gelip gelmediğidir.
- Bit'leri oku. Yalnızca-square bir iterasyon exponent biti 0'a karşılık gelir; square-ardından-multiply bir iterasyon bit 1'e karşılık gelir. RSA çizimine göre, daha dar tepe squaring adımıdır ve daha geniş tepe multiplication adımıdır; böylece exponent bit'leri 0 ve 1 birbirinden ayırt edilebilir.
- Key'i yeniden kur. Kurtarılan bit'leri birleştirmek, özel exponent'i tek bir trace'ten doğrudan verir.
Sızdıran operasyon dizisi (left-to-right square-and-multiply)
// r = base^d mod n — the multiply is CONDITIONAL on the secret bit.
r = 1;
for (int i = nbits - 1; i >= 0; i--) {
r = (r * r) mod n; // SQUARE : every iteration (always present)
if (bit(d, i) == 1)
r = (r * base) mod n; // MULTIPLY: ONLY when d_i == 1 <-- leaks d_i
}
// Power trace per bit:
// d_i = 0 : [ square ]
// d_i = 1 : [ square ][ multiply ] <-- visibly longer / extra peak
Detection¶
SPA, target'ın kendisinin pasif bir ölçümüdür, bu yüzden victim saldırıyı gözlemleyemez. Bunun yerine savunmacılar sızıntı için implementation'ları denetler: secret-dependent bir branch, loop sayımı ya da conditional aritmetik adımı içeren herhangi bir kriptografik primitive SPA ile suistimal edilebilir; code review'de işaretlenmeli ve bir tezgah leakage setup'ında doğrulanmalıdır.
Mitigation¶
Note
Savunma elektriksel değil, algoritmiktir: secret'ı operasyon dizisinden kaldır.
- Constant control flow. "There are no secret values which affect the conditional branches" sağlanmalı — her exponent biti aynı operasyonları yürütsün.
- Square-and-multiply-always / Montgomery ladder. Her iterasyonda bir multiply yap (0 bitinde onu at) ya da bir Montgomery powering ladder kullan; böylece trace, key bit'lerinden bağımsız olarak aynıdır.
- Blinding. Exponent/message blinding her çalıştırmada veriyi randomize eder, böylece artakalan data-dependent sızıntı bile trace'ler arasında biriktirilemez (DPA'ya karşı da bir önkoşul savunmasıdır).