Live data from Hacker News

Spotting base64 encoded JSON, certificates, and private keys

ergaster.org

91–100 of 135 posts

Re: Spotting base64 encoded JSON, certificates, and private keys

#91
post #61

The encoded JSON string is going to start with "ey", unless there's whitespace in the first couple characters. Also, it seem like the really important point is kind of glossed over. Base64 is not a kind of encryption, it's an encoding that anybody can easily decode. Using it to hide secrets in a GitHub repo is a really really dumb thing to do.

There is actual encryption here. The base64 JSON only encodes the salt and parameters of the key derivation function used to encrypt the data.

Re: Spotting base64 encoded JSON, certificates, and private keys

#92

Good knowledge, now explain why it's like that. {" is ASCII 01111011, 00100010 Base64 takes 3 bytes x 8 bits = 24 bits, groups that 24 bit-sequence into four parts of 6 bits each, and then converts each to a number between 0-63. If there aren't enough bits (we only have 2 bytes = 16 bits, we need 18 bits), pad them with 0. Of course in reality the last 2 bits would be taken from the 3rd character of the JSON string,…

That’s really a leap about the writer’s interest. They could just as easily have felt the underlying reason was so obvious it wasn’t worth mentioning. I know how base64 encoding works but had never noticed the pattern the author pointed out. As soon as read it, I ubderstood why. It didn’t occur to me that the author should have explained it at a deeper level.

Is it? In the first paragraph the author clearly shows his ignorance of base64. When told that it "looks like base64 encoded JSON" he

    was incredulous but gave it a go, and it worked!!
Even if you don't notice the ey specifically the string itself just screams base64 encoding, regardless of what's actually inside.

Re: Spotting base64 encoded JSON, certificates, and private keys

#93
post #78
post #37

Kind of reminds me of a junior being amazed when I was able to read ascii strings out of a hex stream. Us old folks have seen a lot .

For anyone here who's never pondered it ("today's lucky 10,000"?), there's a lot of intentional structure in the organization of ASCII that comes through readily in binary or hex. https://altcodeunicode.com/ascii-american-standard-code-for-... The first nibble (hex digit) shows your position within the chart, approximately like 2 = punctuation, 3 = digits, 4 = uppercase letters, 6 = lowercase letters. (Yes, there's m…

I should just have put the printable character chart right here in the post for people to compare:

     0 1 2 3 4 5 6 7 8 9 A B C D E F
  ..
  2    ! " # $ % & ' ( ) * + , - . / 
  3  0 1 2 3 4 5 6 7 8 9 : ;  ? 
  4  @ A B C D E F G H I J K L M N O 
  5  P Q R S T U V W X Y Z [ \ ] ^ _ 
  6  ` a b c d e f g h i j k l m n o 
  7  p q r s t u v w x y z { | } ~
I don't have a mnemonic for punctuation characters with second nibble >9, or for the backtick. The @ can be remembered via Ctrl+@ which is a way of typing the NUL character, ASCII 00 (also not coincidental; compare to Ctrl+A, Ctrl+B, Ctrl+C... for inputting ASCII 01, 02, 03...).

Re: Spotting base64 encoded JSON, certificates, and private keys

#94
post #67

I built a JWT support library at work ( https://github.com/geldata/gel-rust/tree/master/gel-jwt ) and I can confirm that JWTs all sound like "eyyyyyy" in my head.

It's like how all certificates sound like "miiiiii".

Ok

Re: Spotting base64 encoded JSON, certificates, and private keys

#96
Useful ones to know:

- `R0lGOD` - GIF files

- `iVBOR` - PNG files

- `/9j/` - JPG files

- `eyJ` - JSON

- `PD94` - XML

- `MII` - ASN.1 file, such as a certificate or private key

These are nice to know since they show up pretty frequently (images in data: URLs, JSON/XML/ASN.1 in various protocols).

Re: Spotting base64 encoded JSON, certificates, and private keys

#97

Earlier quoted context omitted.

That’s really a leap about the writer’s interest. They could just as easily have felt the underlying reason was so obvious it wasn’t worth mentioning. I know how base64 encoding works but had never noticed the pattern the author pointed out. As soon as read it, I ubderstood why. It didn’t occur to me that the author should have explained it at a deeper level.

Is it? In the first paragraph the author clearly shows his ignorance of base64. When told that it "looks like base64 encoded JSON" he was incredulous but gave it a go, and it worked!! Even if you don't notice the ey specifically the string itself just screams base64 encoding, regardless of what's actually inside.

TBC I was addressing the parents suggestion that the writer was incurious.

One blog post is hardly enough to just someone as ignorant but after quick look at the author's writing/coding/job history, I doubt he is that either.

I think it's fantastic that you can look at a string and feel it's base64 essence come through without a decoder. Thinking about it for a minute, I suspect I could train myself to do the same. If someone who already knew how to do it well wrote a how-to, I bet it would hit the front page and inspire many people, just like this article did.

I just don't get the urge to dump on the original author for sharing a new-to-him insight.

Re: Spotting base64 encoded JSON, certificates, and private keys

#98
post #28
post #14

You can spot Base64 encoded JSON. The PEM format (that begins with `-----BEGIN [CERTIFICATE|CERTIFICATE REQUEST|PRIVATE KEY|X509 CRL|PUBLIC KEY]-----`) is already Base64 within the body.. the header and footer are ASCII, and shouldn't be encoded[0] (there's no link to the claim so perhaps there's another format similar to PEM?) You can't spot private keys, unless they start with a repeating text sequence (or use the…

The other base64 prefix to look out for is `MI`. `MI` is common to every ASN.1 DER encoded object (all public and private keys in standard encodings, all certificates, all CRLs) because overwhelmingly every object is a `SEQUENCE` (0x30 tag byte) followed by a length introducer (top nibble 0x8). `MII` is very very common, because it introduces a `SEQUENCE` with a two byte length.

You'll also see "AQAB" a lot. This is the base64 version of the integer representation of 65537, the usual public exponent parameter e in modern RSA implementations.

Re: Spotting base64 encoded JSON, certificates, and private keys

#99
post #93
post #78

Earlier quoted context omitted.

For anyone here who's never pondered it ("today's lucky 10,000"?), there's a lot of intentional structure in the organization of ASCII that comes through readily in binary or hex. https://altcodeunicode.com/ascii-american-standard-code-for-... The first nibble (hex digit) shows your position within the chart, approximately like 2 = punctuation, 3 = digits, 4 = uppercase letters, 6 = lowercase letters. (Yes, there's m…

I should just have put the printable character chart right here in the post for people to compare: 0 1 2 3 4 5 6 7 8 9 A B C D E F .. 2 ! " # $ % & ' ( ) * + , - . / 3 0 1 2 3 4 5 6 7 8 9 : ; ? 4 @ A B C D E F G H I J K L M N O 5 P Q R S T U V W X Y Z [ \ ] ^ _ 6 ` a b c d e f g h i j k l m n o 7 p q r s t u v w x y z { | } ~ I don't have a mnemonic for punctuation characters with second nibble >9, or for the backtic…

Hex 21 through 29 were the shift characters on the numbers on the old Apple ][ keyboard.

Re: Spotting base64 encoded JSON, certificates, and private keys

#100
post #78
post #37

Kind of reminds me of a junior being amazed when I was able to read ascii strings out of a hex stream. Us old folks have seen a lot .

For anyone here who's never pondered it ("today's lucky 10,000"?), there's a lot of intentional structure in the organization of ASCII that comes through readily in binary or hex. https://altcodeunicode.com/ascii-american-standard-code-for-... The first nibble (hex digit) shows your position within the chart, approximately like 2 = punctuation, 3 = digits, 4 = uppercase letters, 6 = lowercase letters. (Yes, there's m…

> the character you'd get on a traditional U.S. keyboard layout

I use a different layout so I'd never realised there was method to the madness! I get the following

$ echo -n ' !@#$%^&*(' | xxd -p 2021402324255e262a28

Post reply on HN