1/ SIMD-0334, von Stanislav Ladyzhenskiy, behebt die syscall-Prüfung alt_bn128_pairing von Solana. Es fügt eine ordnungsgemäße Längenprüfung der Eingabebytes für elliptische Kurvenpaarungen hinzu, um einen Missbrauch mit falsch dimensionierten Eingaben zu verhindern. Lassen Sie uns aufschlüsseln, was das bedeutet 🧵
2/ alt_bn128_pairing ist ein Systemaufruf für das Pairing auf der BN128-Elliptischen Kurve, die in Zero-Knowledge-Beweisen verwendet wird. Er nimmt eine Liste von Kurvenpunkten als Eingabe. Jedes Punktpaar ist 192 Bytes groß, daher müssen gültige Eingaben ein Vielfaches von 192 Bytes lang sein.
3/ Das Problem: Die Längenprüfung verwendete Rusts checked_rem falsch. checked_rem gibt nur None zurück, wenn durch Null geteilt wird, sodass die Prüfung bei 192 niemals fehlschlug. Infolgedessen würde der Pairing-Systemaufruf ausgeführt, selbst wenn die Eingabe kein Vielfaches von 192 war.
4/ Die Lösung: Überprüfen Sie, ob die Eingabelänge ein Vielfaches von 192 ist, und geben Sie einen Fehler aus, wenn dies nicht der Fall ist. Dies erfasst alle verbleibenden Bytes sofort, anstatt sie stillschweigend zu ignorieren. Die Codeänderungen befinden sich in solana-sdk und werden mit Agave v3.1.0 ausgeliefert.
1,2K