Diferencias y similitudes entre cookies, sesiones y tokens, comprensión de JWT, firmas digitales y certificados de firma

¿Qué son las cookies, las sesiones y los tokens? ¿Cual es la diferencia?

¿Por qué necesitas cookies, sesiones y tokens?

        En primer lugar, debemos pensar por qué existen estas tres cosas, porque el protocolo HTTP es causado por la naturaleza sin estado. ¿Qué es la apatridia? Por ejemplo, cuando el cliente y el servidor realizan una solicitud y una respuesta, el protocolo solo se encarga de procesar la solicitud, rechazar la respuesta, etc., pero no es responsable de la memoria, lo que causará problemas. El protocolo debe verificarse, pero el protocolo en sí no tiene la capacidad de recordar, por lo que obviamente no es razonable verificar cada solicitud. Al igual que cuando va a Taobao y accede a una nueva página, debe iniciar sesión y verificar. La gente normal tendrá una mentalidad explosiva, por lo que para mantener el progreso de la sesión, se crearon cookies y sesiones. Este es su propósito. Por supuesto, el token es el mismo, pero los medios son ligeramente diferentes.

Cookies y sesiones:

        Hablemos primero de las cookies. El primer punto: ① Lo que debemos recordar es que las cookies se almacenan en el cliente y las sesiones se almacenan en el servidor. Esto se entiende aquí, la cookie es la clave que se coloca en la mano del cliente y el servidor es un hotel, y la sesión es la cerradura de cada puerta. Hay un camarero dentro de la puerta que puede hablar con los clientes. Las diferentes ubicaciones de almacenamiento son una diferencia importante. Por ejemplo, si queremos tener una sesión, debe utilizar una llave para abrir la puerta correspondiente. Para continuar la sesión, segundo punto: ② Las cookies tienen un tiempo de caducidad. Si no se configuran, la cookie será el tiempo de sesión actual del navegador. Si se cierra el navegador, la cookie caducará. Si se establece el tiempo de vencimiento, la cookie se almacenará en el disco duro, si el navegador está cerrado, la cookie seguirá existiendo la próxima vez que lo abra. El tercer punto: ③Las cookies tienen límites de tamaño. El tamaño de una sola cookie es de 4kb. La mayoría de los navegadores limitan un sitio para almacenar hasta 20 cookies. Cuarto punto: ④ Otro punto a tener en cuenta aquí es que las cookies se almacenan en texto sin formato y el método de almacenamiento son pares clave-valor, lo que expone el problema de que los datos privados, como las contraseñas de las cuentas, no pueden existir en las cookies; robadas por otros. De manera similar, las cookies son fáciles de falsificar y el valor de la cookie se puede modificar fácilmente. Por lo tanto, si la información importante se almacena en texto sin formato, es muy fácil que se filtre y explote.

        Lo siguiente que debemos hablar es la sesión. Acabo de comparar la sesión con una cerradura de puerta, que puede comprender mejor la relación correspondiente entre las cookies y las sesiones. De hecho, la sesión también se puede comparar con una factura. Durante cada sesión, el session enviará el ID de la sesión al cliente. La cookie se almacena en el lado del cliente. La próxima vez que desee tener una sesión, la cookie presentará el número de factura correspondiente. Las sesiones se buscarán una por una. Si encuentra el correspondiente comenzarás a continuar con la sesión anterior. ¿Por qué no usar el ejemplo anterior aquí? De hecho es porque el servidor es el foco. Búscalo en base a la cookie que te proporciona el cliente, que es el número de factura. Si es el ejemplo de ahora, el cliente encontrará la puerta correspondiente, no es razonable, pero cuando se trata de esto, se presenta un presagio, es decir, la sesión debe continuar para continuar la sesión encontrando la puerta correspondiente. número de factura correspondiente, el servidor debe guardar el protocolo en su memoria para cada solicitud. Si el volumen de solicitudes es grande, esto también representa una gran sobrecarga. Si es como Taobao y JD.com, para una gran base de clientes, simplemente almacenar el usuario Los datos son un gasto enorme y se debe tener en cuenta una situación especial, porque los datos deben almacenarse en la memoria y luego compararse con las cookies, por lo que si no es un solo servidor Proporciona servicios, por ejemplo, el servidor A primero. proporciona servicios, el cliente establece contacto con A y almacena la sesión correspondiente. Cuando el cliente accede al servidor distribuido B, el contacto no se puede establecer porque la sesión se almacena en el servidor A, por lo que cuando se enfrenta a un sistema de servidor distribuido, las cookies Y las sesiones tienen ciertas fallas, que también allanan el camino para la generación de tokens. Otro punto que necesita atención es que los datos falsificados por las cookies no se pueden distinguir fácilmente. Vamos, ¿cuál es el equivalente entre el modo de verificación de sesión y cookie? Al igual que Algunos supermercados pueden emitir tarjetas de membresía a cada cliente. Cuando compras, el poder de decisión para la verificación es el cliente. Por ejemplo, muestro mi tarjeta de membresía y digo: Si soy miembro, entonces el cajero me tratará como a un miembro y ayudarme a obtener descuentos. Sin embargo, si alguien falsifica una tarjeta de membresía, o toma la de otra persona, y luego dice que soy miembro, el cajero aún lo tratará como miembro. Procesamiento, es por eso que la seguridad de las cookies es bajo. El servidor devolverá la información devuelta al cliente en texto plano para su almacenamiento. Es decir, el servidor dice quién es usted y este "quién", siempre que el cliente presente Sin cookies, el servidorLa verificación pasó, pero todos sabemos que muchas verificaciones ahora requieren que usted lleve su tarjeta de membresía para verificar si es miembro antes de poder usarla.

Aquí resumiré las deficiencias de las cookies y la verificación de sesión (no todas, entiendo algunas de ellas):

①La sesión necesita almacenar información de sesión para cada sesión en la memoria, lo que puede entenderse como facturación, lo que ocupará mucha memoria y aumentará la presión sobre el servidor.

②La sesión tiene limitaciones, si es un solo servidor no habrá problema porque todas las facturas están en la tienda principal, sin embargo, si es un servicio distribuido tendrá el problema de no poder verificar.

③La seguridad no es alta porque el servidor envía la cookie al cliente, el cliente solo necesita enviar la cookie para pasar la verificación.

④Las aplicaciones móviles como apps invalidarán la sesión

⑤Las cookies no permiten el acceso entre dominios

⑥La cookie tiene un límite de tamaño de 4kb

¿Qué es la ficha?

        El token es una cadena de cadenas generada por el servidor. Se utiliza como un token solicitado por el cliente. Al iniciar sesión por primera vez, el servidor generará un token para el cliente. Las solicitudes posteriores pueden traer el token sin iniciar sesión. De hecho, es lo mismo que las cookies son muy similares, pero los tokens tienen un paso de verificación adicional. Ya no es necesario presentarlos para pasar. En comparación con las cookies, los tokens reducen la presión sobre el servidor. No es necesario guardar un gran cantidad de registros de sesión como sesiones. A través del token, el servidor consulta a redis para obtener información del usuario. Esto no solo resuelve el problema de las deficiencias de las cookies ① sino que también resuelve el problema de que ② la sesión no puede manejar servicios distribuidos. Con redis, el servidor Solo necesita consultar la información del usuario en Redis, y el token no limita el tamaño, pero la cookie es de solo 4k y el token puede permitir solicitudes entre dominios, que también es diferente de las cookies, y también resuelve el problema de que los dispositivos móviles aplicaciones como aplicaciones invalidarán la sesión. Se puede ver que el token tiene muchos aspectos. Hay ventajas sobre las cookies, pero como dije antes, deben combinarse con escenarios de aplicación. Actualmente, tanto las cookies como los tokens son muy comunes. Se usa, pero parece que todos están más impresionados con los tokens relacionados con la verificación de inicio de sesión. Además de consultar tokens en Redis, hay otra forma. En forma de JWT, debido a que las consultas frecuentes de Redis también aumentarán la presión sobre Redis, JWT también tiene ciertas ventajas en comparación con consultar redis. Entrega los datos al navegador para su almacenamiento y lleva el JWT a la próxima vez que necesite continuar con la solicitud. El servidor puede realizar la verificación. Esto puede evitar el paso de consultar redis y reducir el La presión sobre Redis hasta cierto punto, pero también debe basarse en el escenario empresarial, porque no he investigado mucho sobre los problemas de seguridad de JWT y la verificación de tokens con Redis.

                                                                    Figura 5)

Comparando la seguridad de los tokens y las cookies, ¿por qué los tokens son más seguros?

        En primer lugar, la seguridad del token es mayor que la de las cookies. Como se mencionó anteriormente, las cookies equivalen a que el servidor le emita un pase. Solo necesita mostrar el pase para pasar la verificación. Para decirlo sin rodeos, Zhang San Puede acceder al mismo con el pase emitido por el servidor a Li Si. Datos, el servidor no se preocupará por quién es usted. La cookie es un pase emitido por el servidor al usuario cliente. De hecho, el token y la cookie son muy similares. pero la diferencia es que el token agrega un mecanismo de firma. Con el mecanismo de firma, se fortalece la seguridad de los datos. Entonces, ¿cómo garantiza el mecanismo de firma digital la seguridad de los datos? En primer lugar, el más común actualmente es JWT. La estructura de datos en la Figura (5) se utiliza para completar la transmisión y autenticación del token. La firma digital también se almacena en ella. El nombre completo de JWT es JSon Web Token. se transmite en forma de Json. La información es digital. Está firmada, por lo que la información es confiable. La mitad del JWT es una cadena similar a adb.123ccc.666ad, con . como delimitador y consta de tres partes: Encabezado , Carga útil y Firma.

Encabezamiento:

{

"alg": "HS256", "typ": "JWT"

}

Hay dos atributos principales. El atributo typ se escribe uniformemente como JWT y alg indica el algoritmo utilizado para el cifrado. HS256 aquí es cifrado simétrico y RS256 es cifrado asimétrico. Aquí hay un presagio para analizar el cifrado simétrico y asimétrico en detalle más adelante. (Presagio 1)

carga útil:

Lo que se almacena aquí son algunos datos similares a cookies, similares a:

Hay siete campos predeterminados para elegir:

  • iss (emisor): emisor/emisor

  • sub (asunto):asunto

  • aud (audiencia): usuario

  • exp (tiempo de vencimiento): tiempo de vencimiento

  • nbf (no antes): hora efectiva, no es válida antes de esta hora

  • iat (Emitido en): momento de emisión

  • jti (JWT ID): utilizado para identificar el JWT

{

"iss":"zs",

"sub":"123",

"sex":"男" //同样允许写入自定义的字段

}

        Vale la pena señalar que el objeto json de JWT simplemente se cifra con Base64. Dado que este cifrado es reversible, el texto original se puede obtener mediante codificación inversa, por lo que los datos confidenciales aún no se pueden colocar en JWT.

Firma:

        La tercera parte de JWT es la firma, que también es una parte importante. Tuve muchas preguntas cuando vi esto y también busqué conocimientos relevantes para resolver mis dudas. Esta es la combinación de las dos primeras partes, encabezado. y La información de la carga útil se cifra primero en base64 en forma de cadena y luego utiliza el método de cifrado declarado en el encabezado, como los datos obtenidos después del cifrado HS256. Se puede entender que cuando los datos no se manipulan, los datos secretos descifrados se pasado Los datos obtenidos después del análisis inverso de base64 son los mismos que el encabezado y la carga útil. Este es un paso para verificar inicialmente la seguridad de los datos. Por ejemplo, el cliente envía el JWT al servidor y el servidor descifra la parte de la firma. y descubre que la carga útil y el encabezado son los mismos que los enviados. Si la carga útil y el encabezado del texto sin formato no coinciden, demuestra que la información ha sido manipulada. La firma aquí se llama firma, que es equivalente a la firma del usuario. Entonces, ¿cómo procede este proceso? Es así: después de que el usuario inicia sesión exitosamente por primera vez, habrá cierta información. El servidor la encripta a través de HS256 y otros métodos. Encripta la información almacenada en las cookies y otra información para Verifique el inicio de sesión exitoso del usuario y lo almacene en un certificado de firma y lo firme por nosotros, como Yi xx, aquí está Este es un punto que se puede distribuir. Comencé a considerar por qué HS256 es un método de cifrado simétrico. Porque el cifrado simétrico Requiere que la clave se guarde correctamente (no es conveniente para la transmisión. Discutiré el motivo en detalle más adelante). Solo me di cuenta más tarde. De hecho, no hay participación del usuario en este proceso. El usuario, es decir, el cliente, no participa en el proceso de cifrado y descifrado, es el servidor el que cifra y descifra la información, es decir, después de que la información similar a las cookies para verificar si el usuario ha iniciado sesión es cifrada por el servidor, se nos devuelve, lo guardamos y lo enviamos al servidor la próxima vez que se use. Luego, el servidor descifra la clave para confirmar si la información ha sido manipulada. Si no, pasa. El servidor está realizando el cifrado. y trabajo de verificación de descifrado de principio a fin. La clave solo la conoce el servidor. Dado que no es necesario transmitir la clave entre el cliente y el servidor, no hay ningún problema de seguridad (independientemente de la seguridad de la transmisión, el cifrado simétrico descifra más rápido y es definitivamente mejor que el cifrado asimétrico), razón por la cual JWT utiliza principalmente HS256 en lugar de RS256 (cifrado asimétrico), que creemos que es más seguro, principalmente porque no es necesario transferir la clave, por lo que el escenario empresarial es muy importante. Ahora que hemos mencionadoCon esto, no pude evitar pensar en qué es una firma digital, cómo garantizar la precisión de una firma digital y la diferencia entre cifrado simétrico y cifrado asimétrico, así que fui a aprender más al respecto.

                                                                 Figura 1)

En primer lugar, ¿qué es una firma digital?

Primero, tome el algoritmo de firma digital RSA como ejemplo: (cifrado asimétrico)

        Como se muestra en la imagen de arriba (1), para verificar que el archivo le pertenece, Xiao Ming necesita firmar digitalmente el archivo. Luego, la clave pública y la clave privada se generarán de acuerdo con el algoritmo de firma digital RSA. Aquí, usted Es necesario prestar atención a la comprensión de la clave pública y la clave privada. No lo son. Estas dos son claves literales. La diferencia entre pública y privada es que la clave pública se publica en Internet o se anuncia al mundo exterior, mientras que la clave pública se publica en Internet o se anuncia al mundo exterior. La clave privada es guardada por individuos. Por ejemplo, si un dato puede cifrarse con la clave pública, entonces la persona que posee la clave privada puede obtener el texto original descifrando la clave privada. De manera similar, si los datos son cifrados por el clave privada, entonces el texto original se puede obtener descifrando la clave pública. Una característica del cifrado asimétrico es que bajo la premisa del cifrado de clave privada, si solo se sabe La clave pública no puede obtener el texto original, por lo que ocurre el siguiente escenario:

La empresa A tiene su propia clave pública A y su propia clave privada A, y la empresa B tiene su propia clave pública B y su propia clave privada B.

(Aquí presento qué es el cifrado simétrico, como HS256. El cifrado simétrico en realidad significa que se usa una clave para cifrar y descifrar. Sin embargo, dado que se usa una clave para cifrar y descifrar, el almacenamiento y transmisión de la clave es un problema. Si alguien intercepta Todos los datos se pueden obtener utilizando la información clave y el almacenamiento de la clave también es un problema)

        Si la empresa A quiere enviar información privada importante a la empresa B, puede cifrarla con la clave pública de la empresa B, cifrar simétricamente los datos que deben transmitirse y enviar la clave cifrada a la empresa B. Entonces, siempre que tiene la clave privada correspondiente. Sólo la empresa B puede descifrar el contenido de la información obtenida y luego utilizar la clave obtenida para descifrar la información cifrada simétricamente. Esto garantiza la seguridad de la información. ¿Por qué hacemos esto? Aunque el cifrado asimétrico es más seguro, el cifrado y el descifrado consumen relativamente mucho tiempo, por lo que la información se cifra simétricamente y luego la información cifrada y la clave se transmiten al destinatario, lo que mejora en gran medida la eficiencia del descifrado y garantiza la seguridad. ​(Básicamente: la clave pública asimétrica no se puede guardar, solo necesita guardar la clave privada, pero el proceso de cifrado y descifrado es lento, cifrado simétrico, cifrado y descifrado de la misma clave, guardar la clave es difícil, pero el cifrado y el proceso de descifrado es rápido, todas las ventajas complementarias)

                                                                 Figura 2)

                                                                    imagen 3)

¿Cómo garantiza una firma digital la autenticidad de un documento y determina quién lo firmó?

        Tomando el cifrado asimétrico como ejemplo, a través del problema de la firma, sabemos que la firma se compone principalmente de la clave pública de la clave privada, y a partir de estas dos se genera una firma digital, entonces, ¿cómo garantiza la firma digital la autenticidad de la archivo y si es ¿Qué pasa con el que firmé? Por ejemplo, ahora soy Xiao Ming y he generado claves públicas y privadas a través del algoritmo de firma asimétrica RSA. Si necesito entregar un archivo (o un archivo importante) que pueda verificar mi identidad, pero como el archivo de texto sin formato es fácil de manipular, primero usaré una operación hash para convertir el archivo de prueba en un valor hash de archivo. A diferencia de base64, el resultado de la operación hash es irreversible. En otras palabras, el texto original no se puede deducir del resultado. No he profundizado en las razones específicas. Aquí hay algunos ejemplos. Un ejemplo ilustra aproximadamente que un ejemplo simple de irreversibilidad es la aritmética modular. Por ejemplo, podemos usar 10%3 El resultado es 1, pero 10 no se puede deducir de 1, porque también puede ser 4, etc., por lo que la operación hash también es un método similar, que puede ser más complicado, pero el principio es el mismo. Como se muestra en la Figura (1), aquí obtenemos el valor hash del archivo. Luego, ciframos el valor hash H del archivo con la clave privada generada por el algoritmo de firma. Luego obtenemos la firma digital S. Luego, la clave pública. , el archivo original y las firmas digitales se pueden enviar a Internet en texto plano. Por ejemplo, en este momento, Xiaohong necesita verificar la firma y verificar la autenticidad de Xiaoming y el archivo. Luego solo necesita descifrar la firma digital. S a través de la clave pública para obtener un archivo con valor hash H, también puede convertir el archivo en un valor hash de archivo H y luego comparar los valores hash H generados dos veces. Si son inconsistentes, significa que el archivo tiene ha sido manipulado, pero también se puede decir que puede ser La firma digital no es de Xiao Ming, por lo que la comparación falla. Sin embargo, debido al mecanismo de las firmas digitales, las firmas digitales solo pueden ser generadas por el propietario de la clave privada. , por lo que la firma digital debe ser generada por el propietario de la clave privada. Quizás se pueda decir que Xiao Ming no pertenece al propietario del archivo, pero la firma digital debe pertenecer a Xiao Ming, pero aquí viene otro punto de atención. ¿Cómo nos aseguramos de que Xiao Ming sea el propietario de la clave privada? Como se muestra en la Figura (2), otras personas también pueden generar claves públicas y privadas a través de firmas digitales, y luego usar sus claves públicas y privadas para la verificación. Según el proceso, también es factible. Esto es como si yo sostuviera a Zhang San Si el aviso de admisión va a la escuela y está firmado con el nombre de Zhang San, aún puedo pasar la verificación, porque no se puede saber si soy Zhang San y no puedo saber si el propietario de la clave privada es Xiao Ming, pero sabemos que cuando una persona genera una clave privada, también genera una clave pública. En otras palabras, el propietario de la clave privada es el productor de la clave pública. Entonces, ¿cómo determinar si el productor de la clave pública? ¿La clave es Xiao Ming? De ahí nació el certificado digital como se muestra en la Figura (3). El certificado digital es una organización autorizada y la autoridad emisora ​​del certificado. Su función es demostrar quién es el productor de la clave pública, es decir, quién es el El propietario de la clave privada es. Así que todos simplemente vayan a un lugar autorizado para identificarse, a fin de evitar la suplantación. De manera similar, la estructura de emisión de certificados también tiene su propio conjunto de claves públicas y privadas. Xiao Ming envía su información y su clave pública a una autoridad emisora ​​de certificados de CA. CA Después de confirmar que es correcta, la información de identidad y la clave pública de Xiao Ming se cifrarán usando su clave privada y serán certificadas por una CA famosa. De esta manera, Xiao Ming tendrá credibilidad cuando coloque el certificado en Internet, que equivale a que la escuela les dé a los estudiantes Cuando se emita el certificado de graduación, se le estampará el sello de la escuela, de esta manera, cuando lo lleves a una empresa, otros estarán dispuestos a creer en tus calificaciones académicas cuando vean el sello. Sin embargo, Esto plantea una pregunta: ¿cómo garantizar que el certificado de CA no sea falsificado? Como se muestra en la Figura (4), puede haber una Universidad de Pheasant que estampa su sello casualmente y pretende ser una escuela regular, y luego debe haber agencias de verificación de nivel superior, como la Oficina Nacional de Educación, etc. (no es razonable si no sé mucho al respecto), pero para las computadoras, el sistema Se instalará un certificado raíz por adelantado, que garantiza que esas instituciones de CA sean confiables.

                                                                         Figura 4)

Supongo que te gusta

Origin blog.csdn.net/weixin_54515240/article/details/129445989
Recomendado
Clasificación