2

我想避免存储我的密码列表,而是使用公开可见的 MATLAB 函数可靠地重新生成它们。该函数采用一个未存储在任何地方的密钥来设置随机数生成器的种子。

这是在我需要时重新生成帐户密码的安全方法吗?我所说的安全是指,它比知道我的密钥是什么的人更容易受到攻击吗?

% Start with a blank slate
clear all
clc

% {url, #symbols, #upper, #lower, #numbers}
accounts = { ...
    'www.foo.com', [3,3,3,3]; ...
    'www.bar.com', [0,4,4,4]; ...
    'www.box.com', [0,2,3,2]; ...
    };
key = input('Secret Key: ', 's');
acc = input('Account Name (URL): ', 's');
% Clear display immediately
clc

% Allowed characters
s = { ...
    '@#$%&*=+'; ...                 % symbols
    'ABCDEFGHJKMNPQRSTUVWXYZ'; ...  % upper
    'abcdefghjkmnpqrstuvwxyz'; ...  % lower
'123456789' };                  % numbers

% Find matching accounts
idx = strfind(accounts(:,1), acc);

% Generate password for each matching account
for j = 1:length(idx)
    if isempty(idx{j})
        % Skip if there is no matching account
        continue
    end

    % Salted random number generator seed
    rng(sum([key, ': ', accounts{j,1}]), 'twister');

    ns = accounts{j,2};
    n = sum(ns);

    % Construct password
    p = '';
    for k = 1:length(s)
        v = s{k};
        p = [p v(randi(length(v),1,ns(k)))];
    end
    p = p(randperm(n));
    fprintf('Password for %s is %s\n', accounts{j,1}, p)
end

% Clear all variables for safety
clear all

例如,我上面的原型导致

Password for www.foo.com is q*PZry4@8%3F
Password for www.bar.com is 8nZ8NWa6C8am
Password for www.box.com is wUw3Bn9

每次我使用输入运行我的 MATLAB 代码时:

Secret Key: MySecretKey
Account Name (URL): www
4

2 回答 2

1

不错的程序,最薄弱的可能不是算法,而是你使用它的方式。

显然,在 matlab 命令窗口中输入/打印密码不是很安全。日志文件被保留,并且可能会以某种方式被抓取以获取您的密码。此外,如果您在自己家外使用密码,则密码有时可见是一个相关的弱点。

使用类似passwordentrydialog的东西,密钥可能会保持不可见。但是,如果您真的想使用生成的通行证,则需要目视观察或将其放在剪贴板上。在公共场所,两者都可能不太好。


从技术角度来看,如果你把它放在架子上几年,Matlab 可能不再能够生成相同的随机数了。但是,如果您总是在卸载旧版本之前检查它是否适用于新版本,那应该没问题。


总而言之,我会说它可以为家庭使用提供一个很好的机制,但如果你能记住很多个人密码,那肯定会更安全。另请注意,有一些免费服务可以为您存储密码(受主密码保护)。

于 2013-07-24T13:21:43.790 回答
0

其他人已经看过您的问题并提出了不同的解决方案,例如Password Safe。您的密码被安全存储,并且程序本身会在使用后负责清除缓冲区等。披露:我自己使用该程序。

于 2013-07-25T13:59:44.390 回答