Poner mis propios dos centavos debido a un problema que aún no se ha mencionado. En particular, estoy de acuerdo con lo que dijo @NickSloan, pero con una advertencia más.
Hay una diferencia más importante entre una clave API y una contraseña. Las claves API son únicas para su sitio. La parte que hace que la seguridad de la contraseña sea tan importante es compartir la contraseña. Si alguien retiene la contraseña que un usuario guardó en su sitio, no solo se compromete su sitio: son todos los otros sitios para los que el usuario usó esa contraseña (y correo electrónico / nombre de usuario). Muchas personas reutilizan contraseñas en sitios críticos: bancos, redes sociales, correo electrónico, etc., lo que significa que la buena seguridad de las contraseñas no se trata tanto de proteger el acceso a su sitio como de proteger a sus usuarios en otros sitios. No podemos obligar a los usuarios a mejorar la seguridad, por lo que debemos asumir lo peor y tomar medidas adicionales para proteger su propia privacidad.
Una clave API es un escenario completamente diferente porque es exclusivo de su sitio. Como resultado, si es robado, el atacante obtiene acceso a su sitio, pero no gana nada que pueda utilizar contra el banco / correo electrónico / etc de esa persona. Esto significa que el nivel de riesgo para las claves API es en realidad más bajo que el de las contraseñas. No están exactamente en el mismo parque de pelota: las claves API son más similares a los identificadores de sesión que a las contraseñas.
Comprender que estos son más parecidos a los identificadores de sesión que a las contraseñas proporciona información práctica sobre cómo proteger adecuadamente estas claves. Tenga en cuenta que la siguiente discusión es aplicable a las Claves de la API para cosas como las credenciales de OAuth y no a las credenciales de encriptación (como lo explica @NickSloan en su respuesta).
Las amenazas más grandes para las contraseñas son los ataques de phishing y las bases de datos pirateadas, por lo que las almacenamos con hash en nuestras bases de datos. Las amenazas más grandes para las claves de API son las mismas que para las claves de sesión: debilidades en aplicaciones front-end como vulnerabilidades XSS, MIM y similares. Es importante tener en cuenta que la aplicación de front-end necesita la contraseña en forma no cifrada, por lo que el hashing de la clave API no le gana nada cuando la persona que es más probable que la roben la necesita en texto simple.
En su lugar, protege un identificador de sesión (o token de OAuth, o clave de API específica del cliente) principalmente mediante el seguimiento del cliente. Si un identificador de sesión es robado a través de XSS u otro medio del cliente, un resultado típico es que el atacante use ese identificador en un dispositivo nuevo. Eso significa que, de repente, verá que una clave antigua aparece con un nuevo agente de usuario. Tal cambio es fácil de detectar y corregir: invalida inmediatamente todas las claves API. Especialmente en el caso de las solicitudes de OAuth, esto es muy sencillo para el usuario: simplemente vuelven a iniciar sesión y obtienen una nueva, mientras que alguien que solo robó la llave (y no tiene la contraseña) regresa a la mesa de dibujo .
Esta es una medida de defensa lo suficientemente común como para que un pirata informático más inteligente también intente registrar el agente de usuario asociado con la clave robada y lo utilice en todas las solicitudes futuras, pero aún puede ver fácilmente que ocurre algo sospechoso cuando el mismo usuario tiene solicitudes procedentes de múltiples direcciones IP. Como todo lo demás en el mundo, esto puede ser un poco como un juego del gato y el ratón, pero hay algunos puntos importantes:
- Una clave API / OAuth Token / ID de sesión es realmente una forma de recordar a un usuario en un dispositivo en particular, para que no tengan que poner su contraseña en cada página. Como resultado, en caso de duda, puede eliminar todas las claves autorizadas y obligar al usuario a iniciar sesión nuevamente.
- En los tres casos, dado que perder Key / Token / ID hace que una cuenta se vea comprometida, es importante tener cierta seguridad activa en estas cosas y detectar / responder si ocurre algo sospechoso. Si alguna vez ha recibido avisos de facebook / google / etc sobre alguien que intenta iniciar sesión en su cuenta desde México, es porque un tipo de seguridad en algún lugar está haciendo su trabajo correctamente.
- Los vectores de ataque principales para las Claves / Fichas / Identificaciones son diferentes a los de las contraseñas. Es posible que aún desee incluirlos en su base de datos (nuevamente, no estamos hablando de credenciales de encriptación que deben estar en texto sin formato), pero no puede simplemente incluirlas en su base de datos y llamarse seguro. Debes asegurarte y asegurarlos contra una nueva gama de vectores de ataque. Si los considera solo como contraseñas, perderá algunas partes importantes del panorama general.