Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Esta visão geral fornece uma descrição de alto nível das interações entre os vários elementos de código no exemplo de comunicação segura a CNG (Cryptography Next Generation).
Ele aborda os seguintes aspectos do exemplo:
Aplicativos
Files
Classes
Versões de segurança
Visão geral da sessão
Chaves criptográficas (versões 2 a 5)
Assinaturas digital trocadas por canal pública (versão 3)
Assinaturas digital trocadas por canal particular (versão 4)
Encerramento de sessão (versão 5)
Observações adicionais
Limitações do exemplo CNG
Aplicativos
O exemplo consiste em três aplicativos de um console separado, Alice, Bob, e Mallory. Cada aplicativo é criado sistema autônomo um projeto Visual Studio separado e consiste em um arquivo principal e três arquivos compartilhados.A tabela a seguir mostra os aplicativos e seus arquivos.
Nome do aplicativo (projeto) |
Files |
|---|---|
Alice |
|
Bob |
|
Mallory |
|
Files
As tabelas nas seções a seguir resumem as classes e métodos usados por cada aplicativo, na ordem em que aparecem no código-fonte.
Alice.cs Bob.cs e Mallory.cs
Classe, método, ou nome da variável global |
Uso |
|---|---|
CNG_SecureCommunicationExample |
Projectwide classe parcial. |
MyColor OtherColor fDisplaySendMessage |
Variáveis global. |
Main |
Ponto de entrada do programa para cada aplicativo.Esse método lida com o seguinte:
|
Run |
Método que chama o InitializeOptions método e criará o cenário de segurança selecionado. |
Utilities.cs
Classe, método, ou nome da variável global |
Uso |
|---|---|
CNG_SecureCommunicationExample |
Todo o projeto de classe parcial. |
Version fVerbose fMallory |
Variáveis global. |
Autoloader |
Método Alice liga para carregar os aplicativos Bob.exe e Mallory.exe. |
InitConsole |
Método que manipula o menu de interface de usuário e mensagens de nível de aplicativo. |
SplashScreen |
Método que fornece os títulos de janela de console. |
ReadALine |
Método de utilitário que lê uma linha inserido pelo usuário a partir do console. |
ReadAChar |
Método de utilitário que exibe uma pergunta e solicita ao usuário uma resposta Sim ou não. |
InitializeOptions |
Método que exibe opções e solicita ao usuário uma seleção.Esse método também define o Version, fVerbose, e fMallory sinalizadores global. |
Display(string s) |
Primeiro dos dois Display métodos. Esse método transmite a seqüência de caracteres e o MyColor variável para o segundo Display método. |
Display(string DisplayString, int color) |
Segundo dos dois Display métodos. Esse método encapsula Console.WriteLine instruções e fornece suporte de cor para linhas de saída. |
Para obter mais informações sobre essas classes, métodos e variáveis, consulte Análise de código de classes da utilitário (CNG exemplo).
ChannelManager.cs
Classe, método, ou nome da variável global |
Uso |
|---|---|
CNG_SecureCommunicationExample |
Todo o projeto de classe parcial. |
AppControl |
Método que fornece controle interno do aplicativo e sincroniza os aplicativos de três console. Alice usa esse método para enviar as opções do programa (Version e fVerbose sinalizadores) para Bob e Mallory. AppControl não é um método do sistema de mensagens. Seu conteúdo não está criptografado ou assinado.Não chama o Communicator classe. |
SendChannelName ReceiveChannelName |
Métodos que são usados para comutador entre o PublicChannel chamado pipe para o AliceAndBobChannel e AliceAndBobChannel1 pipes nomeados. Esses métodos permitem que a violação de segurança deliberado discutida no Visão geral de exemplo da CNG. |
ChannelManager |
Classe que fornece a estrutura de comunicação entre processos para o aplicativo. |
Para obter mais informações sobre essas classes e métodos, consulte Análise de código da classe ChannelManager (CNG exemplo).
Communicator.cs
Classe, método, ou nome da variável global |
Uso |
|---|---|
CNG_SecureCommunicationExample |
Todo o projeto de classe parcial. |
Communicator |
Classe que encapsula todas as funções de criptografia.Essa classe processa todas as mensagens entre Alice e Bob Mallory.It does not process messages sent by the ChannelManagerAppControl method. |
m_DSKey m_ECDH_Cng m_ECDH_local_publicKey_XML m_ECDH_remote_publicKey ChMgr |
Variáveis de classe. |
Communicator |
Método constrói um Communicator objeto. |
Dispose |
Método que lança mantido recursos em particular. |
StoreDSKey |
Método que armazena uma chave de assinatura digital. |
Send_or_Receive_PublicCryptoKey |
Método que fornece suporte de troca de chaves. |
iv ciphertext signature |
Variáveis de classe privada usadas para criptografar mensagens de texto não criptografado.Essas variáveis são declaradas perto o ReceiveMessage() método. |
ReceiveMessage |
Método que recebe em texto não criptografado ou mensagens criptografadas, dependendo da versão de segurança. |
SendMessage |
Método que aceita uma mensagem de texto não criptografado e os envia para fora como texto não criptografado ou em formato criptografado, dependendo da versão de segurança. |
Para obter mais informações sobre essas classes, métodos e variáveis, consulte Análise de código da classe Communicator (CNG exemplo).
Classes
Cada projeto contém três classes:
public partial class CNG_SecureCommunicationExample
Essa classe estende-se a todos os arquivos de projeto quatro incluídos nos aplicativos Alice e Bob Mallory.Após a compilação, a CNG_SecureCommunicationExample classe contém todas as classes, variáveis e métodos para os arquivos de quatro projeto. Para obter mais informações sobre classes parcial, consulte Parcial classes e métodos (Guia de programação C#).
internal sealed class ChannelManager
Essa classe fornece suporte ao pipe nomeado.Cada projeto cria vários ChannelManager instâncias em momentos diferentes durante a execução do programa. Os detalhes dessa classe podem ser encontrados em Análise de código da classe ChannelManager (CNG exemplo).
internal sealed class Communicator
Essa classe fornece criptografia e descriptografia de suporte.Cada projeto cria vários Communicator instâncias em momentos diferentes durante a execução do programa. Os detalhes dessa classe podem ser encontrados em Análise de código da classe Communicator (CNG exemplo).
Versões de segurança
O código-fonte suporta o cenário de segurança apresentado no Visão geral de exemplo da CNG.Ele implementa os seguintes cinco versões, que representa cinco níveis de segurança, do ferramenta (IM) de sistema de sistema sistema de mensagens instantâneas:
Versão 1: Usa mensagens de texto não criptografado e pipes nomeados.
Versão 2: Usa mensagens criptografadas.
Versão 3: Usa mensagens criptografadas e assinaturas digital.
Versão 4: Usa mensagens criptografadas e uma assinatura digital particular.
Versão 5: Encerra o aplicativo quando são encontrados erros de segurança.
Observação: |
|---|
O restante deste tópico se refere a essas versões por número.Além disso, d epending em contexto, os nomes "Alice", "Bob" e "Mallory" pode se referir a três pessoas envolvidas no cenário de exemplo ou a três Visual Studio aplicativos. |
Visão geral da sessão
Alice, Bob e Mallory têm um Main método e um Run método.
The Main método sincroniza os aplicativos e executa as seguintes funções:
Exibe uma tela inicial de inicialização.
Pergunta ao usuário a escolher as opções de sessão (Alice).
Envia as opções de sessão para Bob e Mallory (Alice).
Recebe as opções de sessão de Alice (Bob e Mallory somente).
Chama o Run método para realizar a sessão de segurança solicitado.
The Run método executado cenários de segurança.
Cada sessão ilustra uma das versões listadas na seção anterior.
Uma sessão começa quando Alice e Bob Mallory inserir seus Run métodos e termina quando eles retornarem ao seu Main métodos.
Alice e Bob Mallory sempre executem a mesma versão durante uma sessão.
Alice inicia todas as transações que ocorrem durante uma sessão.Mallory responde para Alice e inicia as transações com Bob.Bob apenas responde.
O código-fonte para Alice e Bob é muito semelhante.A principal diferença é que Alice inicia cada sessão e atua sistema autônomo um servidor de pipe e Bob funciona sistema autônomo um cliente do pipe.Código do Mallory é mais complexo porque gerencia dois pipes separadas: um com Ana Maria e outra com Bob.
Método Main
Alice liga para o InitializeOptions método no início de seus Main método e recebe (Opções) sessãoVersion, fVerbose, fMallory) do usuário. Ela usa o seu AppControl método para enviar as opções para Bob e Mallory, quem recebê-los por meio de seus AppControl métodos. Se o usuário decidir fechar o aplicativo digitando a letra "x", AliceAppControlmétodo envia a seqüência de caracteres "sair" em vez das opções de sessão para Bob e Mallory.
Após três aplicativos recebeu as opções de sessão, chamam seus Run métodos.
Executar método
Alice e Bob Mallory executar a sessão solicitada executando as seguintes etapas:
Alice liga para o SendChannelName método, que usa um canal de chamada PublicChannel. Ele envia um novo nome de canal ( de BobAliceAndBobChannel).
Se o fMallory sinalizar estiver definido como trueEscuta Mallory PublicChannel e intercepta o canal novo nome)AliceAndBobChannel) de Alice. Em seguida, ele envia Bob um nome de outro canal (AliceAndBobChannel1).
Alice e Bob cria Communicator objetos nomeados após eles mesmos. Esses objetos são criados dentro do translation from VPE for Csharp using instruções e são descartados no participante das Run método.
Alice é inicializada sistema autônomo um servidor de pipe:
using (Communicator Alice = new Communicator("server", NewChannelName))Bob é inicializado sistema autônomo um cliente de pipe:
using (Communicator Bob = new Communicator("client", NewChannelName))Mallory cria dois Communicator objetos, MalloryAlice e MalloryBob. Mallory é inicializado sistema autônomo um cliente de pipe com Ana Maria:
using (Communicator MalloryAlice = new Communicator("client", AliceChannelName))Mallory é inicializado sistema autônomo um servidor de pipe com Bob:
using (Communicator MalloryBob = new Communicator("server", BobChannelName"))The Communicator Construtor de classe aceita o nome de canal e cria um público de longo prazo ChannelManager objeto chamado ChMgr:
ChMgr = new ChannelManager(mode, ChannelName);The ChannelManager construtor aceita o nome de canal e cria um pipe nomeado correspondente.
Observação:Neste ponto, Alice e Mallory sejam comunicam em um pipe chamada AliceAndBobChannel, e Mallory e Bob está se comunicando através de um pipe nomeado AliceAndBobChannel1.
AliceAndBobChannel e AliceAndBobChannel1 canais de longo prazo que permaneça aberta até o participante do cenário de segurança (ou seja, o participante das Run método).
Os valores do fVersion sinalizar (que controla a versão de segurança) e o fMallory sinalizar (que controla o envolvimento do Mallory) determine o que acontece depois:
Na versão 3, Alice envia uma chave de assinatura digital para Bob por PublicChannel. Eles usam essa chave de assinatura digital para assinar as chaves e mensagens.If fMallory é trueMallory intercepta a chave de assinatura digital e o usa para assinar as chaves e as mensagens que ele envia para Ana Maria e Luís.
Nas versões 4 e 5, Ana Maria envia duas chaves de assinatura digital para Roberto.Chave de assinatura digital 1 é a chave mesma que Alice enviada na versão 3.Chave de assinatura digital 2 é uma chave secreta de assinatura digital que Mallory não conhece.
Alice e Bob troca chaves criptográficas públicas para as versões 2 a 5.If fMallory é trueMallory intercepta as chaves públicas e substitui sua própria.
Alice e Bob trocam mensagens.If fMallory é trueMallory intercepta, altera e reenvia mensagens de Alice e Bob.
Depois que Alice e Bob terminar se comunicando com Outros, você será solicitado para enviar suas próprias mensagens.Isso lhe permite ver como suas mensagens obtém criptografadas e o que faz Mallory alterá-los.Quando tiver terminado, pressione ENTER transferência o controle novamente para Alice.
Alice Finaliza a sessão.Alice e Bob do Mallory Run métodos retornar controle a seus Main métodos e as reinicializações de exemplo.
Chaves de criptografia (versões 2 a 5)
As versões 2 a 5 criptografar mensagens usando o algoritmo AES (criptografia AES).A criptografia chave troca é implementada no Alice e Bob do Mallory Run métodos após o seguinte código de demonstrativo:
if (2 <= Version)
A chave criptográfica é enviada pela longo prazo pública ChannelManager () objetoChMgr) que é criado pela Communicator Construtor de classe.
As instruções de dois código seguintes mostram como envia Alice e Bob recebe a chave criptográfica:
Alice.Send_or_Receive_PublicCryptoKey("send", MyColor);
Bob.Send_or_Receive_PublicCryptoKey("receive", OtherColor);
O segundo parâmetro define a cor que o aplicativo de recebimento deve usar ao exibir o Sumário da chave criptográfica.
Implementações de AES são consideradas matematicamente quebrar.No entanto, o AES não oferece nenhuma proteção contra um ataque man-in-the-middle.Pode parecer que Mallory pode descriptografar as mensagens de Alice e Bob quando AES oferece criptografia forte de tal contraditórias.Isso é possível porque Mallory tem de Alice e Bob compartilhado acordos secretos.Chave interceptação e substituição do Mallory tornam a criptografia AES de alta segurança inúteis.
O uso de chaves de criptografia sem autenticação fornece uma falsa sensação de segurança.Alice e Bob que têm um esquema de transmissão de mensagem segura com versão 2.Na verdade, a segurança é comprometida antes que eles enviarem sua primeira mensagem.
Empresa de Alice e Bob não sabe se os ataques são originados em dentro ou fora da empresa.Eles criar versão 3 da ferramenta IM para descobrir fonte dos ataques.
Assinaturas digital trocadas por canal Public (versão 3)
Versão 3 tenta corrigir a falha de segurança na versão 2 por meio de uma assinatura digital para assinar as chaves e mensagens.A troca de chaves de assinatura digital é implementada no Alice e Bob do Mallory Run métodos após o seguinte código de demonstrativo:
if (3 <= Version)
A chave de assinatura digital é enviada pelo mesmo a longo prazo canal público sistema autônomo sistema autônomo chaves criptográficas.O código a seguir é responsável por enviar a chave de assinatura digital:
Alice.ChMgr.SendMessage(dsKeyBlob);
Observação: |
|---|
T Ele ChannelManager () instânciaChMgr) que envia a chave de assinatura digital é um membro de Alice Communicator objeto. |
Alice e Bob armazenar a chave de assinatura digital sistema autônomo um membro particular do seu Communicator objetos:
Alice.StoreDSKey(DSKey);
Bob.StoreDSKey(DSKey);
Infelizmente, Mallory com com facilidade copia a assinatura digital de PublicChannel e o salva:
Mallory.StoreDSKey(DSKey);
Quando Ana Maria e Luís recebem mensagens assinadas entre si, as assinaturas digital correspondência das mensagens perfeitamente.Isso ocorre porque Mallory assinado-los com a mesma chave de assinatura digital que Alice e Bob usa.
Na versão 3, as chaves de criptografia e a assinatura digital são trocadas em um canal público na rede corporativa.A empresa que Alice e Bob funciona para suspeita que alguém da empresa está executando os thefts.A empresa cria versão 4 para testar essa idéia.
Assinaturas digital trocadas por canal privado (versão 4)
Versão 4 usa duas chaves de assinatura digital: a chave que foi usada na versão 3 e uma chave secreta segunda enviado por meio de um canal em particular.A primeira tecla agora é tratada sistema autônomo uma chave digital falsa para interceptar o ladrão.A segunda chave é usada pela Alice e Bob para assinar digitalmente suas chaves criptográficas e suas mensagens.
Apenas Ana Maria e Luís recebem versão 4 do software de mensagens INSTANTÂNEAS.Mallory continuará a usar a versão 3.Portanto, Mallory nunca detecta que a assinatura digital, que ele usa é inválido.No entanto, a ferramenta IM de Alice e Bob exibe um aviso de segurança para cada chave única e mensagem recebem.
Versão 4 também demonstra que chaves criptográficas e mensagens estão sendo interceptadas.Isso indica que está ocorrendo um ataque man in middle e que ele é iniciado antes que as chaves criptográficas ainda sejam enviadas.Portanto, um funcionário da empresa que tenha acesso ao corporativa PublicChannel deve ser registrar em log em antes de Bob. O uso inteligente de chave secreta de assinatura digital revela secretas atividades do Mallory.
A transmissão de chave secreta de assinatura digital é implementada no Alice e Bob Run métodos após o seguinte código de demonstrativo:
if (4 <= Version)
As seguintes instruções de código são responsáveis pela criação de Alice e Bob particular ChannelManager instâncias:
ChannelManager ChMgr2 = new ChannelManager("server", "PrivateChannel")
ChannelManager ChMgr2 = new ChannelManager("client", "PrivateChannel")
Particular do canal que usam Alice e Bob (ChMgr2) não é um membro da sua Communicator objetos. Você pode ver isso comparando as seguintes instruções de dois código:
Alice.ChMgr.SendMessage(dsKeyBlob); // Public channel - fake key
ChMgr2.SendMessage(dsKeyBlob); // Private channel - real key
A primeira demonstrativo usa a longo prazo ChannelManager () instânciaChMgr) que é criado no início do Run método. Essa instância é mantida sistema autônomo um membro público de Alice e Bob do Mallory Communicator objetos (consulte a etapa 3 das Visão geral da sessão seção) até o participante da sessão.A segunda demonstrativo usa um objeto temporário existe apenas por tempo suficiente para enviar e receber a chave.Ele é descartado imediatamente após o uso.
Depois de Alice envia a chave secreta de assinatura digital, Bob recebê-la usando a demonstrativo a seguir:
DSKey = ChMgr2.ReadMessage();
Alice e Bob armazenar a chave sistema autônomo um membro particular no seu Communicator objetos:
Alice.StoreDSKey(DSKey);
Bob.StoreDSKey(DSKey);
Essas instruções também substituem a chave de assinatura digital falsa.
Na versão 4, Alice e Bob use a chave secreta de assinatura digital em vez da chave de assinatura digital falsa para assinar as chaves e mensagens.Versão 4 também assina as chaves criptográficas e exibe avisos de segurança sempre que a assinatura digital da mensagem não coincide com a mensagem.
Encerramento de sessão (versão 5)
Versão 5 é idêntica à versão 4, exceto que ele encerra a sessão no primeiro erro.Alice apresenta o primeiro erro quando ela recebe a chave criptográfica pública do Bob e descobre uma assinatura digital inválido.Bob experiências seu primeiro erro quando ele recebe a chave criptográfica pública de Alice e também detecta uma assinatura digital inválido.
Notas adicionais
Descarte do objeto: C# using instruções fornecem maior segurança. Elas são usadas para colocar todos os ChannelManager e Communicator objetos. Quando esses objetos entrar fora do escopo, seus Dispose métodos são chamados imediatamente e todos os recursos mantidos internamente são liberados.
Métodos de codificação: Sempre que sistema autônomo dados criptografados são transmitidos, deve codificá-lo sistema autônomo UTF8 ou Unicode, sistema autônomo nunca ASCII.
Limitações do exemplo CNG
O objetivo do exemplo de comunicações seguras a CNG é demonstrar as funções CNG gerenciadas.sistema autônomo resultado, alguns recursos foram omitidos, incluindo o seguinte:
Validação de parâmetro em todos os métodos.
Uso extensivo de try/catch blocos.
Descoberta de desconexão pipe robusto.
Registrando saída na tela para um arquivo.
Capacidade de configuração dinâmica do algoritmo de criptografia.
Capacidade de configuração dinâmica do algoritmo de assinatura digital.
Outra maneira de transmitir a tecla de sinal digital para Roberto.O pipe nomeado PrivateChannel é uma solução simples; existem outros, mais métodos sofisticados.
Chave de persistência, armazenamento e recuperação.
Uso de chaves de assinatura digital gerada pelo sistema operacional.
Uso de chaves fornecidos por uma infra-estrutura de chave pública (PKI).
Esses recursos envolvem código adicional de complexidade e estão além do escopo desse exemplo.
Consulte também
Conceitos
Exemplo da Secure Communication Cryptography Next Generation (CNG)
Passo a passo mensagem Exchange (CNG exemplo) e chave
Date |
History |
Motivo |
|---|---|---|
|
Julho de 2008 |
Tópico adicional. |
Aprimoramento de informações. |