IV. Claves públicas y privadas, cifrado y firmas digitales
El contenido relacionado con Alipay SDK en este artículo está extraído de Alipay Open Platform.
Dado que Alipay SDK utiliza RSA para cifrar y generar firmas digitales, los conceptos cubiertos en este artículo también son específicos de RSA.
Después de generar un par de claves, hay una clave pública y una clave privada. Necesitamos guardar la clave privada y publicar la clave pública. Un par de claves públicas y privadas no se pueden derivar de una a otra.
Por ejemplo, cuando utilizamos Alipay SDK, nuestro comerciante generará un par de claves A y B. A es la clave privada y B es la clave pública. Alipay también generará un par de claves C y D. , C es la clave privada y D es la clave pública. Nuestro lado comercial necesita guardar la clave privada A del lado comerciante y publicar la clave pública B del lado comerciante en Alipay. Necesita guardar la clave privada C de Alipay y publicar la clave pública D de Alipay en nuestro lado comerciante.
El cifrado se refiere a la tecnología que utiliza un par de subclaves para cifrar datos y otra subclave para descifrarlos. Cabe señalar que se pueden utilizar claves públicas y privadas para cifrar. también se puede usar para descifrar, no significa que solo pueda usar la clave pública para cifrar y descifrar con la clave privada. En cambio, el cifrado y el descifrado deben ser un par de subclaves que cooperen entre sí; de lo contrario, no tendrá éxito. La clave se puede utilizar para cifrar o descifrar; de lo contrario, no tendrá éxito.
El objetivo del cifrado es garantizar que los datos sean ilegibles y evitar que sean interceptados durante la transmisión.
Después de comprender el concepto de cifrado, echemos un vistazo al proceso de cifrado de Alipay y luego introduzcamos el concepto de firma digital. Continuando con el ejemplo de la Sección 1, cuando un comerciante y Alipay publican las claves públicas de cada uno, el comerciante tiene la clave privada del comerciante y la clave pública de Alipay, y Alipay tiene la clave pública del comerciante y la clave privada de Alipay. Ahora, suponiendo que queremos transmitir la información del pedido a Alipay, para garantizar la seguridad de los datos al transmitir la información del pedido, combinado con la clave que tenemos en manos del comerciante, podemos tener dos conjuntos de programas de cifrado. p>
De esta manera, ambos conjuntos de programas de cifrado pueden lograr el efecto de cifrar la información del pedido. Si utiliza el segundo conjunto de programas, el comerciante solo necesita la clave pública de Alipay. cuentas mercantiles o un par de claves privadas. No necesitamos solicitar un par de claves públicas y privadas del lado del comerciante para el mantenimiento, y Alipay no necesita guardar tantas claves públicas del lado del comerciante para un grupo de comerciantes. ¿Por qué la plataforma abierta Alipay nos permite usar el programa uno, no el programa dos? La respuesta está aquí.
Descripción de la plataforma abierta de Alipay: cuando utilizamos RSA (clave de 1024 bits) para el cifrado, la clave pública de Alipay asignada por Alipay a todos los comerciantes es la misma. En otras palabras, Alipay solo es responsable de una cantidad determinada. los comerciantes mantienen un par de claves públicas y privadas de Alipay, lo que significa que la clave pública de Alipay es la misma, quien la obtiene es la misma y cuando usamos RSA2 (clave de 2048 bits) para el cifrado, la clave pública de Alipay es; también lo mismo. Cuando se cifra con RSA2 (clave de 2048 bits), Alipay asignará una clave pública de Alipay separada a cada comerciante, es decir, Alipay mantiene un par de claves públicas y privadas de Alipay separadas para cada comerciante. La clave pública de Alipay en la aplicación es la misma. RSA ha sido compatible durante mucho tiempo, mientras que RSA2 fue compatible recientemente.
Después de comprender la situación anterior, suponiendo ahora que estamos utilizando el esquema de cifrado RSA 2 (muchos comerciantes antiguos no utilizan el cifrado RSA2), la lógica empresarial será la siguiente.
Hay un problema con el cifrado RSA: la clave pública de Alipay es pública y todos los comerciantes utilizan la misma clave pública de Alipay (como se mencionó anteriormente, con el cifrado RSA2, Alipay proporciona a cada comerciante el mantenimiento de una clave pública/privada. par de claves) es fácil de obtener para un atacante y notify_url también es fácil de interceptar.
Por lo tanto, Alipay debe asegurarse de que la solicitud de pago sea realmente enviada por el comerciante y no por el atacante. Esto conduce a las firmas digitales, e introduciremos el concepto específico de firmas digitales a través del proceso de implementación de la Opción 1.
Si usamos la opción 1, la clave privada del comerciante y la clave pública de Alipay se guardan en el lado del comerciante, y Alipay guarda el contenido que debe guardarse con la clave pública del comerciante y la clave privada de Alipay, entonces la lógica comercial será la siguiente.
Esto garantiza la seguridad de la transacción. También podemos ver que el objetivo del uso del SDK de Alipay para garantizar la seguridad de la transacción no es si la información del pedido está encriptada, sino cómo garantizar que el comerciante y Alipay puedan confirmar. La información de cada uno. La información de identidad y del pedido está en texto claro, pero detrás de ellos hay una firma digital.
Una firma digital es en realidad una contraseña después de cifrar los datos de texto sin formato, pero se genera mediante cifrado de clave privada. Generalmente pasamos la firma digital unida después de los datos de texto sin formato al destinatario y al destinatario. Luego, la clave pública se utiliza para descifrar la firma digital para verificar la identidad del remitente y que los datos de texto sin formato no hayan sido manipulados. El proceso de generación de firma digital es en realidad un proceso de cifrado, mientras que el proceso de verificación de firma digital es un proceso de descifrado.
Las firmas digitales tienen dos propósitos: uno es verificar la identidad del remitente y del destinatario; el otro es verificar que los datos no han sido manipulados.
De la primera parte anterior, podemos saber que para garantizar la seguridad de las transacciones entre los comerciantes y Alipay, ambas partes acuerdan firmar digitalmente la transmisión de la información del pedido. Alipay también nos proporciona una herramienta con un solo clic para generar claves RSA, que puede ayudarnos a generar rápidamente un par de claves públicas y privadas del lado comercial. A continuación se dará una explicación aproximada del proceso de pago de Alipay SDK y se señalarán los problemas a los que debemos prestar atención al desarrollar Alipay SDK.
La clave privada RSA generada por nuestro lado comercial (que debe estar emparejada con la clave pública del comerciante) debe guardarse en el lado del servidor, nunca guardarse en el lado del cliente y nunca transferirse desde el lado del servidor a el cliente.
El proceso de firma para firmar la información del pedido debe completarse en el lado del servidor y no debe realizarse en el lado del cliente. El cliente solo es responsable de firmar la información del pedido y llamar a Alipay para realizar el pago.
La clave pública RSA generada por nuestro comerciante (debe estar emparejada con la clave privada del comerciante) debe completarse en la plataforma abierta de Alipay después de la generación.
Se utiliza para enviar la información del pedido al servidor de Alipay después de que firmamos la información del pedido para garantizar que la información del pedido se envíe efectivamente desde nuestro comerciante a Alipay y para garantizar que la información del pedido se transmita. El proceso no ha sido alterado.
Esto no tiene nada que ver con nosotros. Las claves privadas de Alipay son generadas y almacenadas por ellos.
Se utiliza para refrendar los resultados del pago.
La clave pública de Alipay y la clave privada de Alipay son un par, que también son generadas por Alipay. Cuando completamos la clave pública del comerciante en la plataforma abierta de Alipay, la plataforma generará una clave pública de Alipay para. Nosotros podemos copiarlo y guardarlo en el servidor. No lo guarde en el cliente ni lo transfiera al cliente.
Se utiliza para permitir que el servidor realice una verificación de firma en los resultados de pago sincrónicos o asincrónicos que nos devuelve el servidor de Alipay para garantizar que el servidor de Alipay nos devuelva los resultados de pago y no ha sido manipulado. La verificación de los resultados del pago también debe realizarse en el lado del servidor.
Como se mencionó anteriormente: la firma de la información del pedido y la verificación del resultado del pago deben completarse en el lado del servidor y no en el lado del cliente.
El siguiente es el proceso de firmar la información del pedido en el lado del cliente. Es solo para simular el lado del servidor para mostrar cómo firmar la información del pedido y finalmente convertirla en orderString. El proceso de firma también se puede completar en el lado del cliente.
Supongamos que nuestro servidor recibe un resultado de pago del servidor Alipay y que el resultado del pago está firmado digitalmente.
Entonces, ¿cómo comprobará nuestro servidor la firma en el resultado del pago?