views:

2784

answers:

5

Recently I decided to encrypt my engineering log using vim's :X encryption feature. I wrote down the password, but evidently I misspelled something or messed something up because decrypting the file just gives gibberish. To make matters worse, all my backups are somehow corrupted (don't ask, I am not sure how either).

I am not going to make excuses: I know I messed up. Right now I want to focus on how I can fix the mess I've made.

Here's what I've tried:

  1. Use vimzipper to wrap the encrypted file in a zip so it can be cracked by standard zip crackers like fcrackzip, zipcracker, pkcrack, Advanced Zip Password Recovery, etc. Unfortunately this hasn't worked. I recovered a line of plaintext from the file using the leftover info from the registers in my VIMINFO, but I don't have the offset in the file for the recovered plaintext. Regardless, the zip cracking hasn't worked, even for a simple test file with a three-character vim password.

    (see http://zeus.phys.uconn.edu/refs/crackers/vimzipper.c)

  2. Recovery of the swapfile didn't work. When I re-opened the encrypted file with the bad password, vim overwrote the "good" swapfile.

  3. Run unixcrypt-breaker with a large database of plaintext (~30 books from Project Gutenberg) as reference data. This results in gibberish, even if I only seed unixcrypt-breaker with the recovered plaintext. Additionally, I can't seem to break even a simple test file encrypted with vim using this method. (FYI, I am stripping the VimCrypt~01! magic header before I run the decryption and I strip it off using vim in PASTE mode so I don't otherwise alter the file's contents).

  4. Desperately guess every password and misspelling I can imagine. I have spent at least six hours guessing what I could possibly have spelled wrong. :)

In order to rapidly try passwords from a program, I tried compiling an old UNIX copy of crypt/makekey, but the result of that is not the same as the same file being encrypted using vim's -x encryption and the same password.

If anyone can help, I'd hugely appreciate it. If not, thanks for reading. :)

A: 

I hope, in a sense, that you're SOL.

That is, I hope vim uses proper encryption. In that case, your best option is pretty much a search for the encryption key. It can be brute-force or it can be based on qualified guesses as to what the key is.

I'm no vim expert, so I must defer to #vim (they can probably tell you about the encryption algorithm), but if I were you I wouldn't get my hopes up.

Sorry to be the bearer of bad news :(

EDIT: per comment, it appears you're not SOL.

Jonas Kölker
vim uses the unix crypt function - this is 'little sister's diary' level encryption. Everyone has known this for 20years, it remains in unix as a learning experience.
Martin Beckett
+9  A: 

From the VIM documentation:

  • The algorithm used is breakable. A 4 character key in about one hour, a 6 character key in one day (on a Pentium 133 PC). This requires that you know some text that must appear in the file. An expert can break it for any key. When the text has been decrypted, this also means that the key can be revealed, and other files encrypted with the same key can be decrypted.

If it was feasible on a Pentium 133, I think you have a very good chance. :)

I would either use #vim to ask for details on the algorithm or browse through the source code to figure out how the encryption is working and then write a cryptanalysis program.

amdfan
+4  A: 

Not sure if this may help:

Explains how to break a file encrypted with "crypt", might give you a starting point (at least with older versions of vi, the encryption was based on crypt).

Jay
+1  A: 

This ancient newsgroup post had a similar problem to yours:

My problem was that I had accidentally encrypted a script using vi and could not recall the key. many thanks to all those who responded.

Suggestions were as follows:

  • use vi -x and guess the key (I had tried that without success)
  • write a program which makes a crypt call and tries the likely key combinations. the person who suggested this reckoned it would take about 5 minutes to crack
  • download CWB (crypt breakers work bench) form the archives which will help to crack
  • post the problem to sci.crypt.newsgroup including the first 128 bytes of the file after encryption and these bytes before encryption (if i could remember) and somebody in the group might crack it for me
  • re-type the script

One crib you have towards breaking this is you know what the password "should" of been. So, even if you had a random typo, it would still slightly resemble your intended password. Maybe you could start there, write a program to generate all possible combinations of your intended password with 1 or 2 character mispellings-additions.

In any case, what a neat exercise / diversion!

Simucal
+4  A: 

Is it possible that you could have data corruption issues in addition to your encryption problems?

If I was going to brute force this, I think I would write an algorithm that would start to try all variations of the passwords I could have used before moving on to dictionary attacks. Yet, after hearing your story - I have this nagging feeling that you didn't forget your password, but rather there was a data corruption issue somewhere along the way that messed up your password/crypttext/cryptokey/whatever.

Elijah
You know, it seems obvious now that you say it, but you may be absolutely right. That would explain a few things. I do frequent backups, but not integrity checks. It's not malware (I scan regularly), but it is very possible that I have a data corruption issue. I'll look into it. Thanks for the help.
Jurgen