Primero, dado que los navegadores no admiten SRP, necesariamente estamos hablando de una aplicación local personalizada.
Por seguridad, es importante que el código de la aplicación local sea "seguro". Debemos asumir que el usuario inicialmente no tenía la aplicación, luego la obtuvo y la instaló en su computadora. Esto debe ocurrir antes de la inscripción en SRP. Y, sin embargo, los usuarios deben tener una forma de asegurarse de que el código de la aplicación que instalan sea el genuino, no hostil. Tal vez lo obtuvieron de un CDROM / DVD; tal vez lo descargaron a través de un "canal seguro"; tal vez el binario está firmado. El atacante quisiera insertar su propio código en esa aplicación, por lo que DEBE haber algún mecanismo para derrotar al atacante en ese momento.
Suponiendo que el código de la aplicación es seguro, entonces el código de la aplicación puede incrustar una copia de una clave pública de su servidor; p.ej. Una copia del certificado del servidor. Ese certificado puede ser autofirmado o emitido por una CA personalizada, o lo que sea: ya que la aplicación conoce a priori la clave pública del servidor, puede establecer un túnel seguro con el servidor a través de SSL y sin involucrando a una CA externa: la aplicación solo comprueba que el certificado utilizado por el servidor es bit a bit idéntico al incorporado. En ese momento, puede transmitir cualquier contraseña elegida por el usuario sin temor a escuchas hostiles. Podría decirse que también podría seguir usando ese SSL y no hacer ningún SRP en absoluto.
El modelo de "clave pública incorporada" es simple y funcionará, es decir, si no funciona, significa que tienes un problema de seguridad mayor que no puedes resolver con cualquier cantidad de SRP.
Como nota al margen, este ejemplo muestra que SRP, a pesar de ser un algoritmo masivamente sencillo, no es necesariamente útil en contextos donde el código de aplicación personalizado y específico del servidor está instalado en el lado del cliente. La verdadera bondad de SRP ocurre cuando el código del cliente es genérico , por ejemplo. es un navegador web que no incluye ningún código específico del sitio. Pero no estamos allí todavía; los navegadores no saben cómo hacer SRP (por el momento ...).