Análise de código da classe ChannelManager (CNG exemplo)

No exemplo de comunicação segura a CNG (Cryptography Next Generation), a ChannelManager classe fornece a infra-estrutura de comunicação entre processos (IPC) para o exemplo.

A classe é responsável pelo seguinte:

  • Criando, abrindo, fechando e descarte de pipes nomeados.

  • Enviando e recebendo sinalizadores de controle do aplicativo, nomes de canal, assinaturas digital, as chaves criptográficas e mensagens.

See Exemplo da Secure Communication Cryptography Next Generation (CNG) Para obter uma visão geral sobre o exemplo e as descrições das versões mencionadas neste tópico.

Sumário do arquivo ChannelManager.cs

O arquivo ChannelManager.cs contém as classes e métodos a seguir:

  • ChannelManager classe:

    • Construtor: Cria um pipe nomeado e aguarda uma conexão na Outros extremidade do pipe.Se o pipe nomeado for um servidor de pipe, ele aguarda uma conexão de cliente, chamando o WaitForConnection método. Se o pipe nomeado é um cliente de pipe, ele aguarda um servidor de pipe nomeado, chamando o Connect método. The ChannelManager construtor não retorna até que uma conexão é feita.

    • Dispose método: Implementa o System.IDisposable interface, liberando seus () recursos instanciadoStream m_Stream) quando a classe sai do escopo.

    • ReadMessage método: Recebe mensagens de clientes pipe.

    • SendMessage método: Envia mensagens para clientes pipe.

  • AppControl método: Usado pela Alice para enviar sinalizadores de controle do aplicativo para Bob e Mallory.These flags synchronize the Version,fMallory and fVerbose states among the three command windows.AppControl não é envolvido com criptografia ou transmissão de mensagens. É simplesmente um mecanismo de controle interapplication.Esse método cria um temporária ChannelManager objeto que é descartado após é usado.

  • SendChannelName método: Método de conveniência que manipula o envio de um novo nome de canal para um cliente.Esse método cria um temporária ChannelManager objeto que é descartado após é usado.

  • ReceiveChannelName método: Método de conveniência que manipula a receber um novo nome de canal de um servidor.Esse método cria um temporária ChannelManager objeto que é descartado após é usado.

ChannelManager classe Details

Os aplicativos Mallory de Alice e Bob estão conectados por pipes nomeados são criados por ChannelManager instâncias. Cada aplicativo cria e descarta dos dois tipos de ChannelManager objetos:

  • Objetos de longo prazo: Alice e Bob crie um longo prazo ChannelManager objeto no início do seu Run métodos. Eles usam esse objeto para transmitir contatos de vendas.Mallory cria dois a longo prazo ChannelManager objetos no seu Run método: um para se comunicar com Ana Maria e outro para se comunicar com Bob.Os canais são usados para trocar chaves de criptografia e mensagens criptografadas.Eles persistem até o participante do Run método e são, em seguida, descartados.

  • Objetos temporários: The AppControl, SendChannelName, e ReceiveChannelName métodos criar temporário ChannelManager objetos para executar uma tarefa específica. Os objetos, em seguida, são descartados.Além disso, nas versões 4 e 5, Alice envia Bob uma chave de assinatura digital particular usando um temporária ChannelManager objeto.

The ChannelManager classe implementa a System.IDisposable interface e gerencia ambos send e receive modos de transmissão.

A classe fornece a ilusão de uma troca dinâmica entre Alice e Bob Mallory.Na realidade, um pipe pode existir apenas no modo de um por vez: Pode ser um servidor ou um cliente.Portanto, os aplicativos de Alice, Bob e Mallory executar maneira cuidadosa e linear.Cada aplicativo espera pipes para em em aberto e fechar em momentos específicos durante a execução do exemplo.Comunicação não é assíncrono, embora possa parecer estar.

Ele pode aparecerá se um Gerenciador de threads está gerenciando segmentos no plano de fundo; no entanto, nenhuma chamada thread é empregada.Temporização entre processos é obtida apenas por meio de intercalação cuidadoso de send e receive chamadas entre Alice e Bob Mallory. sistema autônomo resultado, sistema autônomo três janelas aparecem para se comunicar sem esforço, cenário discutido a seguir o o Visão geral de exemplo da CNG.

Um benefício dessa implementação é sincronização e o código é simples e lineares.Uma desvantagem é a falta de robustez: Se um cliente de pipe não conseguir se conectar ao servidor, o servidor irá parar de responder.Uma abordagem melhor seria usar um servidor de pipe multithread, trataria normalmente essas falhas.No entanto, para evitar a complexidade, o exemplo não terá essa abordagem.

The ChannelManager classe é instanciado a partir de Alice, Bob e Mallory Main métodos e as Communicator Construtor de classe no arquivo Communicator.cs.

Detalhes de uso

The ChannelManager classe é usada em cinco contextos diferentes: controle do aplicativo, transmissão de nome de canal, mensagem transmissão, transmissão de chave de assinatura digital e transmissão de chave pública de criptografia.Na lista a seguir, essas são discutidas na ordem em que aparecem no código-fonte.

  1. Controle do aplicativo: Alice liga para o InitializeOptions método no início de seus Main método e recebe opções de sessão do usuário. These options (Version,fMallory, and fVerbose) are then sent to Bob and Mallory by the AppControl method.Se o usuário decidir fechar o aplicativo digitando a letra "x", oAppControlmétodo envia a seqüência de caracteres "sair" em vez das opções de sessão para Bob e Mallory.

    • Alice AppControl método cria dois temporário ChannelManager servidores pipe, BobControlChannel e MalloryControlChannel.

    • Bob e do Mallory AppControl métodos criar temporário ChannelManager Canalize os clientes e conecte-se a seus respectivos controle canais.

    • Bob e Mallory receber as opções de sessão de Alice e descartar imediatamente o temporária ChannelManager objetos.

  2. Transmissão de nome de canal: Após as opções de sessão de transmissão, Alice envia Bob um novo nome de canal.

    • Alice usa o SendChannelName método e Bob e Mallory usar o ReceiveChannelName método. Cada método cria um temporária ChannelManager cliente ou servidor do pipe. Após o novo nome de canal foi enviado ou recebido, o temporária ChannelManager instância é descartada.

    • Falha de segurança ocorre quando Mallory intercepta o novo nome de canal chamando ReceiveChannelName 200 milissegundos antes de Bob. Para uma discussão sobre esta falha de segurança, consulte Implementando um ataque man-in-the-middle (CNG exemplo).

  3. Transmissão de mensagens: Após as opções de sessão e o novo nome de canal foram transmitidos, Alice e Bob Mallory criam Communicator objetos. The Communicator construtores de receber o nome do novo canal enviado na etapa anterior e usá-lo para criar a longo prazo ChannelManager instâncias. Esses objetos são o apenas não temporários ChannelManager instâncias. Eles conservadas até que a última mensagem transmitida e recebida e, em seguida, são removidos.

    Observação:

    O ChannelManager objeto criado pela Alice encapsula um servidor de pipe nomeado AliceAndBobChannel. No entanto, Mallory intercepta esse nome e envia um nome de outro canal (AliceAndBobChannel1) para Roberto. Bob passado essa seqüência de caracteres sistema autônomo a name parâmetro para o seu Communicator construtor, criando um cliente de pipe nomeado AliceAndBobChannel1. Essa alterar de nome permite Mallory representar Alice de suas mensagens de Bob.

  4. Transmissão de chave de assinatura digital: Depois de Alice criou sua Communicator objeto, o Version sinalizar é examinado. Na versão 3, ele envia Bob uma chave de assinatura digital por meio de PublicChannel pipe nomeado, onde ele é interceptado pelo Mallory. Em versões 4and 5, ela cria um segredo, temporário ChannelManager instância. Essa instância é usada para transmitir uma chave particular de assinatura digital para Roberto.

    Observação:

    Mallory não conhece este pipe nomeado particular porque ele não é determinada versão 4 ou 5 de sistema de sistema sistema de mensagens instantâneas (IM) do software .Alice continua a usar o long - sistema de sistema sistema de mensagens de termo ChannelManager objeto criado na etapa 3 para enviar uma assinatura digital falsa para Bob. Nas versões 4 e 5, IM ferramenta Bob foi atualizada para ignorar este objeto.No entanto, Mallory acredita que a assinatura é válida e usa para assinar suas chaves criptográficas e suas mensagens.Isso prova para ser seu downfall.

  5. Transmissão de chave pública de criptografia: The Version sinalizar é examinado novamente. Na versão 2 e posterior, a longo prazo sistema de sistema sistema de mensagens ChannelManager objeto criado na etapa 3 é usado para enviar e receber as chaves de criptografia pública.

Depois de tem sido trocadas os nomes de canal, assinaturas digital e chaves criptográficas, Alice e Bob usar o ChannelManager criado na etapa 3 para transmitir mensagens.

Consulte também

Conceitos

Exemplo da Secure Communication Cryptography Next Generation (CNG)

ChannelManager.cs fonte Code (CNG exemplo)

Visão geral do código fonte (CNG exemplo)

Referência

NamedPipeServerStream

NamedPipeClientStream

Date

History

Motivo

Julho de 2008

Tópico adicional.

Aprimoramento de informações.