Post
Topic
Board Bitcoin Discussion
Re: The Legend of Satoshi Nakamato, FINAL STEP PUBLISHED.... 4.87 BTC GRAND PRIZE!
by
kn0w0n3
on 06/01/2018, 23:37:46 UTC
This thread seems pretty active again, so I figured I'd post some recent findings in hopes we can all solve this thing.

I found a bacon (v2) message within the height bit-stream that when decoded appears to be "thefm auriskeyfile". The message is clearly incomplete/incorrectly decoded. We're not even convinced the message is an intended message or just a massive coincidence. A script to decode this message as-is, is below.

We have a solving team going right now that are all working together to solve this. If anyone's interested in joining, send me a PM. We're trying to round out our skill-base.

If this info helps you solve it, please be kind and tip our team: BTC address: 1Giz1ZV8rgk4UfMoscsjQiTp4cXmdSoxN2

Matlab/Octave code:
Code:
%% 1FLAMEN6 - decode "thefm_auriskeyfile" message
% Written by OnTheMF

tall            = 1; % Tall flame bit-value
tiny            = 0; % Short flame bit-value
ribbon_short    = 0; % Short ribbon bit-value
ribbon_long     = 1; % Long ribbon bit-value

%% Dataset

% Key with ribbons
rbn_l2r = [ ribbon_short, ribbon_long, ribbon_long,...
            ribbon_short, ribbon_long, ribbon_short ];

% Outer top segment
ot_l2r = [ tiny, tiny, tall, tall, tiny, tall, tall, tiny, tiny, tall,...
           tall, tall, tiny, tiny, tall, tall, tiny, tall ];
% Outer right segment
or_t2b = [ tiny, tiny, tall, tall, tall, tall, tiny, tiny, tiny, tall,...
           tiny, tall ];
% Outer bottom segment
ob_r2l = [ tiny, tiny, tall, tall, tall, tall, tall, tiny, tall, tall,...
           tiny, tall, tiny, tiny, tiny, tall ];
% Outer left segment
ol_b2t = [ tiny, tall, tall, tiny, tall, tall, tiny, tall ];
% Inner top segment
it_l2r = [ tiny, tall, tall, tiny, tall, tall, tiny, tall, tall, tiny,...
           tall, tiny, tiny, tiny, tall, tiny, tall, tall, tiny, tall,...
           tall, tiny, tall, tall, tiny, tiny, tall, tall];
% Inner right segment
ir_t2b = [ tall, tall, tiny, tall, tall, tall, tall, tall, tiny, tall,...
           tall, tiny, tall, tall, tiny, tall, tall, tall, tall, tall,...
           tiny, tiny, tall, tiny ];
% Inner bottom segment
ib_r2l = [ tall, tiny, tiny, tiny, tall, tall, tall, tiny, tiny, tiny,...
           tall, tiny, tall, tall, tiny, tall, tall, tall, tall, tall,...
           tiny, tall, tall, tall, tall, tall, tiny, tall, tall, tall,...
           tall, tall, tiny ];
% Inner left segment       
il_b2t = [ tiny, tall, tall, tall, tiny, tiny, tall, tall, tiny, tall,...
           tall, tiny, tall ];

% Reverse our segments for easy manipulation
ot_r2l = fliplr(ot_l2r);
or_b2t = fliplr(or_t2b);
ob_l2r = fliplr(ob_r2l);
ol_t2b = fliplr(ol_b2t);
it_r2l = fliplr(it_l2r);
ir_b2t = fliplr(ir_t2b);
ib_l2r = fliplr(ib_r2l);
il_t2b = fliplr(il_b2t);

%% Decode keyfile message
encrypted_track = [ib_l2r, il_t2b, ir_t2b, it_r2l, ot_r2l, ob_l2r];

% Skip first bit
decrypted_track = vectorxor(encrypted_track(2:end), rbn_l2r);

% Generate indexes for every fifth bit (circular buffer)
message_indices = mod((0:(length(decrypted_track)-1)) * 5, length(decrypted_track)) + 1;

% Get the message bits in the correct order
message_data = decrypted_track(message_indices);

% Decode and display message
decodebacon(message_data)

%% Helper functions
% xor a vector or matrix with a given key vector
function [ret] = vectorxor(x,key)
    % Pre-allocate return variable
    ret = zeros(size(x,1),size(x,2));

    % Generate 1:1 vector for xor function
    copies = ceil(size(x, 2) / length(key));
    xkey = repmat(key, 1, copies);
    xkey = xkey(1:size(x, 2));

    % Iterate through each row of input data
    for i = 1:size(x,1)
        ret(i,:) = xor(x(i,:), xkey);
    end
end

% Decode a Bacon v2 string (base 26) - invalid characters mapped to space
function [ret] = decodebacon(x)
    letters = 'abcdefghijklmnopqrstuvwxyz ';
   
    % Only decode 5-bit sequences
    vals = x(1:end - mod(length(x), 5));
   
    % Convert to base 10 values
    dec = sum(reshape(vals, 5, length(vals) / 5) .* (2 .^ (4:-1:0))')';
   
    % Return corresponding string
    ret = letters(min(dec'+1, length(letters)));
end




I'm curious if you know which flames in what order produced that? Should have been 90 flames right.

Guess i'm gonna start trying to xor flame lengths with the ribbon and try to reproduce that.