Lukasz Baldyga

Welcome

Guide to this website

Welcome!

It’s very easy to navigate this website. Use the left side to open folders. Clicking on a section will highlight it and move your view to it. Use the back arrow to go back to folder selection. It’s very similar to your operating system’s files and folders. Please note, if you’re using the bare version of this website, you cannot navigate and you have the full page in view. Enjoy!

About Me and Contact

Contact Me

The best way you can contact me by simply sending an email to lukasz@baldy.ga.

You can also check out my LinkedIn.

About Me

I am an aspiring full stack security/programmer. I self host and write my own programs for my own needs. I love Linux. I host my own websites and make my own content. My dream is to work at a company where I'll be able to grow and learn as a person and a programmer.

I'm recently finished studying Cyber Forensics and Security at Leeds Beckett University. Check out some of my projects I have done at university, they’re the best example I have of my growth. Graduate Picture.

I have written a lot of code in the past, most of it is under the Unlicense Licence, MIT licence, or other “free” licenses because I want to make the world a better place with my code. You can see my code and some of my projects on GitHub. There are some of the examples of my code and projects on this website.

My Projects

Password Manager

For my final year of university, I had to develop a security related product. The task of developing a product came with project management and everything that comes with that, including risk arrestment, resource allocation, development methodology, etc.

Internet Nomad Login
Features
  • You can choose your own encryption: AES or Blowfish ciphers with PBKDF2 or Argon2 key derivation functions
  • Strongest security that adapts to your hardware and patience:
    • The program adapts the number of rounds to the time needed to unlock based on a benchmark
    • The program can adapt to the amount of RAM available (Argon2 specific)
  • Separate identities are available
  • Shared recovery method
  • Paper recovery method
  • Password Generator
  • Theming Support
Encryption and Data Security
New container generation

The user can choose their encryption in the password manager. The user has a choice of Blowfish or AES as encryption methods, and PBKDF2 and Argon2 as key derivation functions. Once the user has selected the appropriate encryption settings, they can fine tune the amount of memory that the program should use and the amount of time the program should take to open one password. Multiple passwords can be added to open the password manager. This is done by encrypting and keeping a copy of the master key in each slot. This removes the need to share the same password. It also makes this password manager secure.

Shared Recovery

It is not unreasonable to assume any adversary that attempts to decrypt the password manager’s encryption might not be willing to allow the user to walk away free, or worse - the adversary may cause the user to expire in a painful way; or - the user may want to terminate themselves given the alternative of torture. Due to this, this password manager allows the user to distribute a shared recovery scheme before being interrogated that allows other people to unlock and read the contents of the password manager. There is no way to tell how many shared recovery schemes have been made and if done correctly, this also means that any adversary would also not know who the pieces have been distributed to. A shared recovery scheme is a scheme where the user creates a number of pieces and an opening threshold where a secret (like a master key) can be derived. Both the threshold and pieces of the scheme can be set independently of each other. (Adi Shamir, 1979). Alternatively, another backup method exists that does not use the shared recovery scheme if the user trusts a sole entity or wants to back up the master key and keep it in a very secure place.

Identities
Internet Nomad Identities pane

Another distinct feature of the password manager is that it implements “Identities”, which are fundamentally a collection of accounts. The password manager is designed as a supplement for operating on the Tor network. Having identities ensures that the user does not accidentally “link”, accounts that they do not want to be linked together, allowing the user to assume an identity per Tor session. This allows for a much safer operating security when doing sensitive tasks.

Accounts
Internet Nomad Identities pane

The password manager has many common password manager functions. It's possible to create accounts, generate passwords, delete and edit accounts and more.

Download and Extra Content

This was mostly an exert from my Password Manager Report. The full project is available on GitHub, if you'd like to view it and play with it.

Bibliography

Adi Shamir (1979) ‘How to Share a Secret’, Massachusetts Institute of Technology, 22(11), pp. 612–613.

This Website

Intro

This website was built using my own open source code. I’ve made it in such a way that it allows users to download the website in full, excluding all of the project files (the file would be too big). The one of most impressive parts is that I’ve developed technologies that allows people to download the website without any external sources, (go on, try it!). This means that images and other media in this page have been embedded into a single HTML file. This includes, but is not limited to:

  • Images
  • Style Sheets
  • Scripts
  • External Resources

You will see that if you download this website by using the download link, you will be able to still browse it and use it as if it was the main website, even without an internet connection.

If you’re very old school, you can also view this page without any media, CSS or JavaScript. It works just as well.

Data URIs

The way I encode data is by using Data URIs. While using URIs on a standard page is very silly as it doesn’t take advantage of the latest HTTP technologies, in this case, it fits perfectly simply because my website could no longer exist and you would still have a perfect snapshot of it years later. It also impresses my peers.

Generation

Another part that is very worth mentioning is that I can generate my pages from the odt format. This format allows me to write this very document in LibreOffice, where I have spell check and other important tools to help me write.

LiberOffice Writer showing the Welcome page.

This is important because as the technologies will evolve and the tools will evolve, it’s important to use something solid to base your website on. In my case, I’ve decided that it would be the best to base it on an open standard that even Microsoft Office supports. Given this stability and availability, I really don’t see this format dying any time soon. I can be certain that it will last a long time. And if it doesn’t, I could always find a better format.

I can also generate pages from HTML/HTM and plain text files. This allows for a backup method for generation and more control over the page that will be generated. In the future, Markdown will be parsed too.

Perfection Every Time

This project can automatically query W3’s NU validator to find any problems with the program or the content that was used to generate the site.

PyCharm showing the error output of the program resulting from a missing close on a hyperlink element.

Upon completion, the script can automatically send the HTML to the service to be analysed. The script receives the info/warnings/errors if any are found and displays them, like above. This helps to find any potential errors before they are shipped to the public. This also doubles as a debugger if necessary.

Limitations

Currently, odt support is lacking in parsing links and more elaborate features of this file format, such as lists and embedded images. This will be addressed in the future updates of this project.

Tor Project

I have been volunteering my network and computing resources to help the Tor Project. I run relay nodes for The Tor Project to help people have clear access to the internet without censorship. I believe that censorship is unjust. I believe full internet privacy is a fundamental right.

I have been running relay nodes where and when I can. You can see my current active nodes here. I have been volunteering, on and off, for roughly 4 years. I hope to be able to volunteer for as long as possible in the future.

A* Algorithm

Intro

I have made a path finding solver. It is available on GitHub and you can see the demo here. This program implements the A* algorithm.

Solver

The solver looks like this:


An example of a path that has been found by my algorithm

Drawing Program

This is one of my third year university projects. You can download a demo here. Simply run the executable. It should run under Wine, but I experienced problems with the file locator. The open source repository is here.

The language

It is a simple drawing program that uses a programming language designed for this project. I was told to instructed to create a program to meet a specific set of guidelines. I achieved 100% of the available marks in this project, meeting all of the criteria necessary. The program can let you draw anything that you might like.

Some of the requirements were:

  • Drawing of basic shapes and lines, like circles and squares.
  • The ability to store and retrieve variables.
  • Flow control, more specifically, if statements.
  • Methods and functions. Specifically functions with or without parameters (recursions was not required).
  • Loading and unloading programs.
  • Error detection.

I go over these and my code in two videos. I don't recommend watching them because they are really long and might be really boring. It was requirement for the project. They're here:

Gallery

Here are some drawings: (tap/hover to preview)

Empty Image
Documentation

It was required that the software engineering project is fully documented. Every class has documentation regarding its use and place in the program. The documentation was generated Doxygen. You can read the documentation here.

Sudoku Solver

Intro

I have made a Sudoku solver. It is available on GitHub and you can see the demo here.

Algorithms

The brute-force Backtracking algorithm is the major solving algorithm in this Sudoku solver with a supporting algorithm that helps remove singles from the graph.

Singles Elimination

Consider this following graph:

An unsolved Sudoku grid

This Sudoku puzzle can be solved completely without the Backtracking algorithm. This is because there are squares where there is only one possible answer. For example, in the top-left grid, the top empty cell has to be 9 because no other possibilities exist. We know this because the possibilities are eliminated by examining the row, column and the square of the cell in any order.

A subsection (square) of the unfinished Sudoku grid

By starting with numbers from 1 to 9 inclusive, we can remove the numbers present in the current square of the cell (1, 2, 3, 6, 8) and are left with numbers 4, 5, 7 and 9.

A subsection (row) of the unfinished Sudoku grid

We can now look at the row of the cell and remove numbers 4 and 5 from our list of numbers. This leaves us wit the numbers 7 and 9.

A subsection (column) of the unfinished Sudoku grid

By looking at the column of the cell, we can remove the 7 from our list of numbers, leaving us with only 9. Since 9 is the only number, we can be certain that only 9 should go into the cell so we write 9 into the cell. We can keep iterating this process until all the squares are filled in:

Solved Sudoku grid

However, this doesn’t guarantee that there will be a solution. This is where you have to use backtracking. The following example cannot be solved using the previous method but can be solved using Backtracking:

Hard, unsolved puzzle gird

This is the solution to the above using my Sudoku solver:

Hard, unsolved puzzle gird