Цифровые подписи позволяют нам проверять автора, дату и время подписей, аутентифицировать содержание сообщения. Он также включает функцию аутентификации для дополнительных возможностей.
Преимущества цифровой подписи
В этом разделе мы узнаем о различных причинах, которые требуют использования цифровой подписи. Есть несколько причин для внедрения цифровых подписей в сообщениях —
Аутентификация
Цифровые подписи помогают аутентифицировать источники сообщений. Например, если филиал банка отправляет сообщение в центральный офис с просьбой об изменении баланса счета. Если центральный офис не может подтвердить подлинность того, что сообщение отправлено из авторизованного источника, выполнение такого запроса может быть серьезной ошибкой.
целостность
Как только сообщение подписано, любое изменение в сообщении сделает подпись недействительной.
Неотрекаемость
Благодаря этому свойству любой субъект, подписавший некоторую информацию, не может впоследствии отрицать, что подписал ее.
Создание цифровой подписи
Давайте теперь узнаем, как создать цифровую подпись. Вы можете создать цифровую подпись, используя Java, следуя инструкциям ниже.
Шаг 1. Создайте объект KeyPairGenerator.
Класс KeyPairGenerator предоставляет метод getInstance (), который принимает переменную String, представляющую требуемый алгоритм генерации ключей, и возвращает объект KeyPairGenerator, который генерирует ключи.
Создайте объект KeyPairGenerator, используя метод getInstance (), как показано ниже.
//Creating KeyPair generator object KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
Шаг 2. Инициализация объекта KeyPairGenerator.
Класс KeyPairGenerator предоставляет метод с именем initialize (), который используется для инициализации генератора пар ключей. Этот метод принимает целочисленное значение, представляющее размер ключа.
Инициализируйте объект KeyPairGenerator, созданный на предыдущем шаге, используя метод initialize (), как показано ниже.
//Initializing the KeyPairGenerator keyPairGen.initialize(2048);
Шаг 3: Сгенерируйте KeyPairGenerator
Вы можете сгенерировать KeyPair, используя метод generateKeyPair () . Сгенерируйте пару ключей, используя метод generateKeyPair (), как показано ниже.
//Generate the pair of keys KeyPair pair = keyPairGen.generateKeyPair();
Шаг 4: Получить закрытый ключ от пары
Вы можете получить закрытый ключ от сгенерированного объекта KeyPair, используя метод getPrivate () .
Получите закрытый ключ, используя метод getPrivate (), как показано ниже.
//Getting the private key from the key pair PrivateKey privKey = pair.getPrivate();
Шаг 5: Создайте объект подписи
Метод getInstance () класса Signature принимает строковый параметр, представляющий требуемый алгоритм подписи, и возвращает соответствующий объект Signature.
Создайте объект класса Signature с помощью метода getInstance () .
//Creating a Signature object Signature sign = Signature.getInstance("SHA256withDSA");
Шаг 6: Инициализируйте объект Signature
Метод initSign () класса Signature принимает объект PrivateKey и инициализирует текущий объект Signature.
Инициализируйте объект Signature, созданный на предыдущем шаге, используя метод initSign (), как показано ниже.
//Initialize the signature sign.initSign(privKey);
Шаг 7: Добавить данные в объект Signature
Метод update () класса Signature принимает байтовый массив, представляющий данные, которые должны быть подписаны или проверены, и обновляет текущий объект указанными данными.
Обновите инициализированный объект Signature, передав данные для подписи методу update () в виде байтового массива, как показано ниже.
byte[] bytes = "Hello how are you".getBytes(); //Adding data to the signature sign.update(bytes);
Шаг 8: Рассчитайте подпись
Метод sign () класса Signature возвращает байты подписи обновленных данных.
Рассчитайте Signature, используя метод sign (), как показано ниже.
//Calculating the signature byte[] signature = sign.sign();
пример
Следующая Java-программа принимает сообщение от пользователя и генерирует цифровую подпись для данного сообщения.
import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.Signature; import java.util.Scanner; public class CreatingDigitalSignature { public static void main(String args[]) throws Exception { //Accepting text from user Scanner sc = new Scanner(System.in); System.out.println("Enter some text"); String msg = sc.nextLine(); //Creating KeyPair generator object KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA"); //Initializing the key pair generator keyPairGen.initialize(2048); //Generate the pair of keys KeyPair pair = keyPairGen.generateKeyPair(); //Getting the private key from the key pair PrivateKey privKey = pair.getPrivate(); //Creating a Signature object Signature sign = Signature.getInstance("SHA256withDSA"); //Initialize the signature sign.initSign(privKey); byte[] bytes = "msg".getBytes(); //Adding data to the signature sign.update(bytes); //Calculating the signature byte[] signature = sign.sign(); //Printing the signature System.out.println("Digital signature for given text: "+new String(signature, "UTF8")); } }
Выход
Вышеуказанная программа генерирует следующий вывод —