Какой язык программирования является одним из самых мощных, но о нем почти не говорят?

Есть те, кто пишет скрипты и автоматизирует свою работу, а есть те, кто тратит свое время, нажимая на глупые кнопки и входя в системы.

Введение

Более 10 лет назад я кое-что кардинально изменил в своей рабочей среде. Для этого я разработал ряд симуляторов устройств Cisco с использованием Flash и запрограммировал их с помощью ActionScript 1.0. Как вы, возможно, знаете, у Flash было много проблем с безопасностью — в основном из-за его способности проникать прямо в машину. И ActionScript 1.0 тоже был мощным, и мы могли создавать сценарии взаимодействия и анимации. Но его использование было ужасным, и вы могли просто объявить переменные в любом месте программы и просто использовать их. Это означало, что масштабировать программы было сложно. Итак, появился ActionScript 2.0, в котором был интегрирован подход в стиле Java, и он стал гораздо более формальным по своей структуре. Затем я принял принципиальное решение… перевести мои программы с ActionScript 1.0 на 2.0 или переписать код на другом языке.

Так что я отказался от Flash и взялся за новенького… Microsoft .NET 1.0. Это была попытка Microsoft превзойти Java и позволить запускать программы в управляемой среде. Эти программы можно было бы тщательно контролировать на предмет их работы, а не запускать процессор. Это означало полное переписывание кода для среды Windows, но это было одно из лучших вложений времени, которое у меня когда-либо было. Все, что было в те дни 1.0, по-прежнему доступно в последней версии .NET, а все, начиная с определенной версии, всегда совместимо с предыдущими версиями. Для Билла Гейтса было так типично развернуть свой корабль и двигаться в правильном направлении.

.NET как основа

Таким образом, .NET позволяет мне разрабатывать программы для Windows с помощью C#, а затем с помощью .NET 2.0 я распространил это на Интернет. Но в основе .NET лежит общая структура, и вы можете легко перенести ее с C# или VB.NET, а также на PowerShell. Если вы таким образом могли программировать на C#, было нетрудно изменить это на PowerShell. В целом, PowerShell предназначен для выполнения всех тех сценариев, которые значительно упрощают жизнь. Нет необходимости компилировать программу, мы можем просто запустить ее из интерпретатора. По сути, PowerShell — это интерфейс командной строки, который всегда должен был быть в Windows. Как известно киберпреступникам, PowerShell — один из лучших способов полностью проникнуть в компьютерную систему. А знаете ли вы, что PowerShell также работает на Linux и Mac OSX?

Как я обычно его использую, я пишу версию программы на C#, а затем преобразовываю классы в классы PowerShell. В C# мы можем использовать классы:

using System.Security.Cryptography.Rfc2898DeriveBytes;
using Security.Cryptography.AesGcm;
using System.Text.Encoding

Для System.Text.Encoding у нас есть все методы, которые мы можем использовать [здесь]:

Затем это просто преобразовать в форму для PowerShell и с определением класса в квадратных скобках:

$keygen = [System.Security.Cryptography.Rfc2898DeriveBytes]::new($Args[1], 64, 10000)
$aesGcm = [Security.Cryptography.AesGcm]::new($key)
$plainBytes = [System.Text.Encoding]::UTF8.GetBytes($plaintext)

Наши переменные имеют $ в начале их имен, и там, где мы определяем методы, которые мы используем, после части «::»:

$plaintext =  $Args[0]
$password=$Args[1]

$keygen = [System.Security.Cryptography.Rfc2898DeriveBytes]::new($Args[1], 64, 10000)
$key = $keygen.GetBytes(32)

$aesGcm = [Security.Cryptography.AesGcm]::new($key)

$plainBytes = [System.Text.Encoding]::UTF8.GetBytes($plaintext)

$IV = $keygen.GetBytes(12)

$tag = [byte[]]::new(16)
$associatedData = [byte[]]::new(12)
$cipherText = [byte[]]::new($plainBytes.Length)

$aesGcm.Encrypt($IV, $plainBytes, $cipherText, $tag, $associatedData)


$plain = [byte[]]::new($cipherText.Length)

$aesGcm.Decrypt($IV, $cipherText, $tag, $plain, $associatedData)

"== AES GCM Encryption (using RFC2898 with 10,000 rounds for key derivation) =="
"`nMessage: " + $plaintext
"`nPassword: " + $password
"`nSalt: " + [System.Convert]::ToBase64String($IV)
"key: " + [System.Convert]::ToBase64String($key)
"`nEncryption: " + [System.Convert]::ToBase64String($cipherText)

"Decryption: " + [System.Text.Encoding]::UTF8.GetString($plain)

Аргументы скриптов часто передаются как аргументы, поэтому в PowerShell есть простой способ сделать это:

$plaintext = $Args[0]
$password= $Args[1]

Что может PowerShell?

Итак, что вы можете с этим сделать? Ну, вот несколько примеров, чтобы вы были в курсе:

  • Интерфейс прикладного программирования для защиты данных (DPAPI). ДПАПИ. Использование DPAPI для защиты пароля.
  • Шифрование AES CBC, ECB, CFB, CTS и OFB с шифрованием Powershell. AES CBC, ECB, CFB, CTS и OFB. Использование режимов AES AES CBC, ECB, CFB, CTS и OFB с Powershell.
  • Шифрование DES CBC или ECB с шифрованием Powershell. DES (CBC/ECB). Использование шифрования DES с Powershell.
  • Шифрование 3DES CBC или ECB с шифрованием Powershell. 3DES (CBC/ECB). Использование шифрования 3DES с Powershell.
  • Шифрование RC2 CBC или ECB с шифрованием Powershell. RC2 (CBC/ECB). Использование шифрования RC2 с Powershell.
  • Шифрование с проверкой подлинности со связанными данными (AEAD) Шифрование AES GCM с шифрованием с помощью PowerShell. АЭС ГКМ. Использование режима AES GCM с Powershell.
  • Хеширование MD5, SHA-1, SHA-256 и SHA-512. Хеширование. MD5, SHA-1, SHA-256 и SHA-512 с выходными данными в шестнадцатеричном формате/Base-64.
  • Хеширование HMAC. ХМАК. HMAC-MD5, HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 и HMAC-SHA512 с выходами hex/Base-64.
  • HKDF (функция получения ключа HMAC). ХКДФ. Создание HKDF с использованием MD5, SHA-1, SHA-256, SHA-384 и SHA-512.
  • Создание PBKDF2 с помощью PowerShell. ПБКДФ2. Создание PBKDF2 с помощью PowerShell. Для этого требуется пароль, значение соли, количество итераций и длина вывода.
  • Пара ключей RSA. Ценности ЮАР. Создание значений RSA, где открытый ключ — [e,N], а ключ дешифрования — [d,N].
  • Подписи RSA. Подписи RSA. При шифровании с открытым ключом мы создаем пару ключей: открытый ключ и закрытый ключ. Если Алиса отправляет данные Бобу, она может добавить свою цифровую подпись, которая докажет, что она является отправителем, а также проверит, что данные не были изменены. Она делает это, подписывая данные своим закрытым ключом, а затем Боб может подтвердить подпись с помощью открытого ключа Алисы. В этом примере мы будем использовать ключи RSA для подписи сообщения, а затем проверим правильную подпись, но убедимся, что неправильная подпись не даст результата.
  • Вычисление значений шифрования и расшифровки RSA в PowerShell. Шифрование RSA и значения расшифровки. В этом случае мы генерируем пару ключей RSA. При этом у нас есть два простых числа (p и q) и вычисляется модуль (N=pq) .
  • Шифрование и дешифрование RSA с помощью PowerShell. Шифрование и дешифрование RSA с помощью PowerShell. Шифрование и дешифрование RSA с помощью PowerShell
  • Заполнение RSA для шифрования и дешифрования с помощью PowerShell. Заполнение RSA для шифрования и дешифрования с помощью PowerShell. Оптимальное заполнение асимметричного шифрования (OAEP) позволяет шифровать сообщение с помощью RSA. Таким образом, он использует шифрование RSA и интегрирует схему заполнения.
  • Использование dP, dQ и InvQ с RSA в PowerShell. Использование dP, dQ и InvQ с RSA в PowerShell. Если мы используем использование dP, dQ и InvQ с RSA, это упростит вычисления.
  • Создание случайного числа в PowerShell. Генерация случайного числа в PowerShell. Эта страница генерирует случайное число в PowerShell и отображает его в виде шестнадцатеричного, Base64 и целочисленного значения.
  • Создание пары ключей ECC в PowerShell. Создание пары ключей ECC в PowerShell. При использовании ECC у нас есть базовая точка на кривой (G), затем мы создаем случайное значение для закрытого ключа (D), а затем генерируем открытый ключ с помощью П=Д.Г.
  • ECDSA для нескольких кривых и различных методов хеширования с помощью PowerShell. ECDSA для нескольких кривых и различных методов хеширования с помощью PowerShell. В ECDSA (электронная подпись с эллиптической кривой) мы используем эллиптическую кривую для создания цифровой подписи. В общем, мы берем хэш сообщения, а затем создаем подпись с помощью закрытого ключа. Затем открытый ключ можно использовать для проверки подписи. В этом случае мы будем использовать ряд кривых, таких как 192-битные, 256-битные, 384-битные и 521-битные кривые, и создавать с помощью ряда методов хэширования (таких как MD5, SHA-1 и SHA-256). ).
  • DSA в PowerShell. Подписи DSA в PowerShell. С DSA (алгоритм цифровой подписи) мы используем дискретные логарифмы для создания цифровой подписи. В общем, мы берем хэш сообщения, а затем создаем подпись, используя закрытый (секретный) ключ и случайное значение одноразового номера (k). Затем открытый ключ и хэш сообщения используются для проверки подписи. В этом случае мы создадим подпись, используя диапазон размеров ключей (512 бит, 1024 бит и 2048 бит) и ряд методов хеширования (таких как MD5, SHA-1 и SHA-256).
  • Метод подписи Шнорра с дискретными журналами с использованием PowerShell. Метод подписи Шнорра с дискретными журналами с использованием PowerShell. С подписями Шнорра можно использовать дискретные логарифмы для создания цифровой подписи. В общем, мы берем хэш сообщения, а затем создаем подпись, используя закрытый (секретный) ключ и случайное значение одноразового номера (k). Затем открытый ключ и хэш сообщения используются для проверки подписи. В этом случае мы создадим подпись, используя диапазон размеров ключей и ряд методов хеширования (таких как MD5, SHA-1 и SHA-256).
  • NIZK (неинтерактивные доказательства с нулевым разглашением) доказательства дискретно-логарифмического равенства с PowerShell. NIZK (неинтерактивные доказательства с нулевым разглашением) дискретно-логарифмического равенства с PowerShell.
  • Шифрование Эль-Гамаля с помощью Powershell. Шифрование Эль-Гамаля.
  • Гомоморфный шифр Эль-Гамаля для умножения (PowerShell). Эль Гамаль. Это описывает гомоморфное умножение Эль-Гамаля с PowerShell.
  • Гомоморфный шифр Эль-Гамаля для разделения (PowerShell). Эль Гамаль. Это описывает гомоморфное деление ElGamal с PowerShell.
  • Гомоморфный шифр Эль-Гамаля для сложения (PowerShell). Эль Гамаль. Это описывает дополнение ElGamal Homomorphic с PowerShell.
  • Гомоморфный шифр Эль-Гамаля для вычитания (PowerShell). Эль Гамаль. Это описывает гомоморфное вычитание Эль-Гамаля с помощью PowerShell.
  • Инверсия x(mod p) в PowerShell. Обратный мод. В криптографии нам часто требуется x−1, что является мультипликативной инверсией x(modp), т. е. x/x−1=1(modp). Он используется при вычислении ключа дешифрования в RSA и в других методах криптографии.
  • Примитивный корень простого числа p по модулю p в PowerShell. Первобытный корень простого числа p по модулю p. Если у нас есть gx(modp) и где p — простое число, можем ли мы найти значение g это гарантирует, что мы получим уникальный вывод от 1 до p-1 для каждого значения x от 0 до p-2. Это известно как примитивный корень по модулю p.
  • Тест Миллера-Рабина для простых чисел в PowerShell. Тест Миллера-Рабина. Тест Миллера-Рабина для простых чисел — один из самых популярных методов проверки простых чисел, используемых в RSA. Учитывая нечетное число (n), у нас будет нечетное число (n−1), из которых мы можем вычислить степень числа 2 со значением s, так что n−1=2sd. Например, если n равно 25, (n−1) будет равно 24, что равно 2×2×2×3 и 23×3. Затем мы выбираем случайное значение a в диапазоне от 1 до (n−1).
  • Случайные простые числа в PowerShell. Случайное простое число. Тест Миллера-Рабина для простых чисел — один из самых популярных методов проверки простых чисел, используемых в RSA. В этом случае мы сгенерируем случайное простое число для заданного количества битов. Сначала мы сгенерируем случайное число, а затем проверим его на простоту. Если это не так, мы будем увеличивать его на два, пока не найдем простое число.
  • Идентификатор объекта (OID) в PowerShell. ОИД. Тег идентификатора объекта (OID) используется для определения используемых методов шифрования. Примером идентификатора для шифрования ECC является 1.2.840.10045.2.1, где 1 — OSI, 2 — тело члена, 840 — US (ANSI), 10045 — ansi-X9–62, а 2 — ключ. Тип 1]. Другие распространенные алгоритмы: 1.2.840.113549.1.1.1 (X509 RSA), 1.2.840.10040.4.1 (Стандарт цифровой подписи X509 — DSS) и 1.2.840.10046.2.1 (Диффи-Хеллман — DH). .