小编Isa*_*ais的帖子

用于共享敏感信息的安全进程间通信

我有一个场景,必须向 C#.NET 程序提供从用户名/密码组合派生的机密。此机密是不可逆的(将其视为哈希),但要求只能使用 .NET 库创建该机密。

这里的问题是,实际包含用户名/密码的程序与需要秘密的程序不同,并且不是 .NET 程序,因此必须通过某些 IPC 发送信息。

值得注意的是,只要用户登录,程序的用户名/密码就会将它们保留在内存中。我意识到这本身非常不安全,但我无法更改它。

我正在寻找一种让 C#.NET 程序尽可能安全地获取秘密的方法。

我提出的两个选项是使用命名管道将用户名/密码直接从一个应用程序传输到另一个应用程序,或者使用 COM 组件,以便第一个应用程序可以将用户名/密码发送到 COM 组件,该组件可以计算并将其写入稍后可由第二个应用程序读取的位置。

对于命名管道方法,我希望凭证请求组件如下所示

using (var a = new NamedPipeClientStream(".", pipeName, PipeDirection.InOut, PipeOptions.Asynchronous, TokenImpersonationLevel.Impersonation))
{
    var requestString = new StreamString(a);
    var credString = new StreamString(a);

    await a.ConnectAsync();

    a.ReadMode = PipeTransmissionMode.Message;

    requestString.WriteString(JsonConvert.SerializeObject(new CredentialRequest()));

    var cred = JsonConvert.DeserializeObject<Credential>(credString.ReadString());

    var secret = await CreateSecret(cred.Username, cred.Password);
    a.Close();
}
Run Code Online (Sandbox Code Playgroud)

基于此,管道的另一侧应该非常明显。

对于 COM 解决方案,我想我会创建一个具有以下方法的对象

public void ComputeAndStoreSecret(string username, string password)
    {

        var secret = CreateSecret(username, password);

        using (var applicationStorageFileForUser = …
Run Code Online (Sandbox Code Playgroud)

.net c# security ipc named-pipes

5
推荐指数
0
解决办法
1685
查看次数

标签 统计

.net ×1

c# ×1

ipc ×1

named-pipes ×1

security ×1