Cloud Crypto Tool

Cloud Crypto Tool – czas na trochę kodu

Cloud Crypto Tool

Na blogu przewinęło się już trochę teorii na temat chmury, czas na trochę praktyki 🙂 Tak się składa, że ostatnimi czasy wystartował konkurs Macieja Aniserowicza DajSięPoznać w ramach którego zdecydowałem się stworzyć prostą aplikację webową wykorzystującą kilka komponentów Azure’owych – Cloud Crypto Tool. Owa aplikacja wykorzystywana będzie do szyfrowania wszelkiego rodzaju informacji – na samym początku ograniczę się tylko do wiadomości tekstowych, aczkolwiek w przyszłości mam zamiar dodać jeszcze pliki graficzne, może kiedyś nawet dźwiękowe. Dane będzie można szyfrować za pomocą najbardziej znanych symetrycznych szyfrów blokowych – zacznę od tych prostszych, takich jak FEAL, SDES – żeby nikogo już nie zrazić na samym początku – potem przejdę do DES’a – i jego różnych wariantów – kończąc na czymś bardziej zaawansowanym np. na AES’ie.

Chciałbym również, żeby Cloud Crypto Tool dostarczał możliwość łamania „prostszych” szyfrów za pomocą różnych technik kryptoanalitycznych, takich jak np. kryptoanaliza różnicowa czy liniowa. Wydaje mi się, że będzie to bardzo miły dodatek, kiedy będziemy mogli spróbować sami złamać wygenerowany przez kogoś szyfrogram, bez znajomości poprawnego klucza deszyfrującego. Skąd pomysł? Tego typu oprogramowanie cały czas jest mi potrzebne do mojej pracy doktorskiej. Wierze, że z jego pomocą będę w stanie zautomatyzować część badań, które muszę wykonywać dla każdego nowo opracowanego ataku kryptoanalitycznego. Może komuś, o podobnych zainteresowaniach, też przyda się tego typu platforma webowa 🙂 Podchodziłem do realizacji tego projektu wielokrotnie, niestety nigdy nie udało mi się go porządnie zacząć, a tym bardziej skończyć. Podchodzę do tego wyzwania jeszcze raz, tym razem z dodatkowymi czynnikami motywującymi jak ten blog i konkurs Macieja.

Wymagania projektu

  • panel do wgrywanie tekstów jawnych użytkownika,
  • możliwość zaszyfrowania tekstu jawnego za pomocą jednego z dostępnych szyfrów kryptograficznych,
  • deszyfrowanie wygenerowanych szyfrogramów,
  • kolejkowanie zadań kryptologicznych,
  • możliwość przeprowadzenia ataku kryptoanalitycznego na szyfrogram, bez znajomości klucza deszyfrującego.

A co w środku – na jakie technologie się zdecydowałem

Na co dzień pracuję w Javascript’cie – NodeJS i AngularJS, aczkolwiek zdecydowałem się porwać na coś innego. Platforma .NET, ze względu na najlepsze wsparcie dla Microsoft Azure – nie ma się chyba co tutaj dziwić – oraz cały czas wiszącą nad moją głową certyfikację – stał się najlepszym wyborem. Jeśli chodzi o szczegóły, na backendzie znajduje się ASP.NET MVC Web API. Projekt tworzony jest w oparciu o uproszczony wzorzec CQRS. Do tego jeszcze Autofac jako kontener IoC (Inversion of Control) oraz noSQL’owa baza danych – MongoDB. Przyda się trochę testów jednostkowych, choćby do przetestowania algorytmów szyfrujących – NUnit? Procesy szyfrowania i deszyfrowania w dużej mierze opierać się będą na wykorzystaniu mechanizmów WebJob’ów oraz kolejek Azure’owych (Queue Storage). Na frontendzie AngularJS (niestety wersja 1.0, na 2.0 nie jestem jeszcze gotowy), LESS jako pre-procesor CSS, HTML5 oraz Angular-Material. Do tego trochę Grunt’a i Bower’a. Źródła projektu można znaleźć pod tym adresem. Pracuję na dwóch branch’ach – wstępnie wszystkie commity lecą domyślnie na develop, jak stwierdzę, że funkcjonalność jest już gotowa, to merguję na master 🙂

Byłoby tego na dzisiaj, za tydzień opiszę architekturę projektu.