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

No exemplo de uma comunicação segura a CNG (criptografia Próximo Generation), ChannelManagerclasse fornece a infra-estrutura de comunicação entre processos (IPC) de exemplo.

A classe é responsável pelo seguinte:

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

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

Consulte Exemplo da comunicação segura, criptografia Próximo Generation (CNG)para obter uma visão geral do 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:

  • ChannelManagerclasse:

    • Construtor: Cria um pipe nomeado e aguarda uma conexão na Outros extremidade do pipe. Se o pipe nomeado é um servidor de pipe, ele aguarda uma conexão de cliente, chamando o WaitForConnectionmétodo. Se o pipe nomeado é um cliente de pipe, ele aguarda um servidor de pipe nomeado, chamando o Connectmétodo. O ChannelManagerconstrutor não retorna até que uma conexão for estabelecida.

    • Disposemétodo: Implementos o System.IDisposableinterface, liberando seus recursos instanciados ( Stream m_Stream) quando a classe sai do escopo.

    • ReadMessagemétodo: Recebe mensagens de clientes do pipe.

    • SendMessagemétodo: Envia mensagens para clientes do pipe.

  • AppControlmétodo: Usado pela Alice enviar sinalizadores de controle do aplicativo para Bob e Mallory. Esses sinalizadores sincronizar o Version, fMallorye fVerboseEstados entre as janelas de comando de três. AppControlnão é é envolvida com a criptografia ou Mensagem transmissão. Ele é essencialmente um mecanismo de controle interapplication. Esse método cria um temporário ChannelManagerobjeto é descartado depois que ele é usado.

  • SendChannelNamemétodo: Método de conveniência que manipula o envio de um Nova nome de canal para um cliente. Esse método cria um temporário ChannelManagerobjeto é descartado depois que ele é usado.

  • ReceiveChannelNamemétodo: Método de conveniência que manipula o recebimento de um Nova nome de canal de um servidor. Esse método cria um temporário ChannelManagerobjeto é descartado depois que ele é usado.

ChannelManager Classe adicionais

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

  • A longo prazo objetos: Ana Maria e Luís Criar um longo prazo ChannelManagerobjeto no Iniciar de suas Runmétodos. Eles usam esse objeto para transmitir contatos de vendas. Mallory cria dois a longo prazo ChannelManagerobjetos no seu Runmétodo: Um para comunicar-se com Ana Maria, e Um para se comunicar com Bob. Os canais são usados para trocar chaves de criptografia e as mensagens criptografadas. Eles persistem até o participante do Runmétodo e são, em seguida, alienado.

  • Objetos temporário: O AppControl, SendChannelName, e ReceiveChannelNamemétodos Criar temporário ChannelManagerobjetos 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 ChannelManagerobjeto.

O ChannelManagerclasse Implementos a System.IDisposablede interface e gerencia Ambas sende receivemodos de transmissão.

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

Pode parecer que um Gerenciador de Segmentos é gerenciamento de Segmentos em segundo plano; no entanto, nenhuma chamada thread é empregada. Intervalo entre processos é obtido apenas por meio de intercalação cuidadoso de sende receivechamadas entre Ana Maria, Paulo e Mallory. sistema autônomo resultado, três janelas aparecem para se comunicar com facilidade, seguindo o cenário discutido à Visão geral sobre o exemplo a CNG .

Um vantagem dessa implementação é a sincronização e o código é simples e linear. Uma desvantagem é a falta de robustez: Se um cliente de pipe não consegue se conectar ao servidor, o servidor irá parar de responder. Uma abordagem melhor seria usar um servidor de pipe multithreaded, o que poderia lidar com essas falhas normalmente. No entanto, para evitar a complexidade, o exemplo não terá essa abordagem.

O de ChannelManagerclasse é instanciado a partir de Alice, Paulo e Mallory Mainmétodos e as Communicatorconstrutor da classe no arquivo Communicator.cs.

adicionais de uso

O ChannelManagerclasse é usada em contextos Diferente cinco: controle do aplicativo, canal de transmissão de nome, transmissão de mensagens, transmissão de chave de assinatura digital e transmissão de chave Público de criptografia. Na lista a seguir, elas são discutidas na ordem em que aparecem no código-fonte.

  1. Controle do aplicativo: Alice liga para o InitializeOptionsmétodo no início de seus de Mainmétodo e recebe as opções de sessão do usuário. Essas opções (Version, de fMallory, e fVerbose), em seguida, são enviadas para Bob e Mallory pelo AppControlmétodo. Se o usuário decidir fechar o aplicativo Digitação a letra "x", AppControlmétodo envia a sequência "Saída" em vez das opções de sessão para Bob e Mallory.

    • Alice AppControlmétodo cria dois temporária ChannelManagerservidores pipe, BobControlChannele MalloryControlChannel.

    • Paulo e do Mallory AppControlmétodos criam temporário ChannelManagercanalizar os clientes e conectar-se a seus respectivo controle canais.

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

  2. Transmissão de nome de canal: Depois a transmissão das opções de sessão, Ana Maria envia Bob um Nova nome de canal.

    • Ana Maria utiliza o SendChannelNameMallory Usar e Bob e método, o ReceiveChannelNamemétodo. Cada método cria uma ChannelManagero servidor do pipe ou cliente. Depois o Nova canal nome tenha sido enviado ou recebido, o temporária ChannelManagerinstância é descartada.

    • Falha de segurança ocorre quando o Mallory intercepta o Nova nome de canal, chamando o ReceiveChannelName200 milissegundos antes de Roberto faz. Para uma discussão sobre esta falha de segurança, consulte A implementação de um ataque man-in-the-Meio (CNG exemplo).

  3. Transmissão de mensagens: Depois que as opções de sessão e o Nova nome de canal foram transmitidos, Alice e Bob Mallory criam Communicatorobjetos. O Communicatorconstrutores recebem o nome do Nova canal enviado na etapa anterior, e Usar-lo para criar a longo prazo ChannelManagerinstâncias. Esses objetos são apenas não temporário ChannelManagerinstâncias. Eles persistem até Último mensagem transmitida e recebida e, em seguida, são descartados.

    Dica

    O do ChannelManagerobjeto que é Criado em em pela Alice encapsula um servidor de pipe nomeado AliceAndBobChannel.No entanto, Mallory intercepta esse nome e envia um nome de Diferente canal ( AliceAndBobChannel1) para Roberto.Bob Passado essa sequência sistema autônomo o de construtor, Criando um cliente de pipe nomeado de nameparâmetro para a suaCommunicator AliceAndBobChannel1.Essa Modificar de nome ativa Mallory representar Alice de suas mensagens de Bob.

  4. Transmissão de chave de assinatura digital: Depois que Alice tiver Criado em em o seu Communicatorobjeto, o VersionSinalizar é examinada. Na versão 3, ele envia Bob uma chave de assinatura digital por meio de PublicChannelchamado pipe, onde será interceptada pelo Mallory. Em versões 4and 5, ela cria um temporário, secreta ChannelManagerinstância. Essa instância é usada para transmitir uma chave particular de assinatura digital para Roberto.

    Dica

    Mallory não é conhece este pipe nomeado particular porque ele não é tiver sido fornecido software versão 4 ou 5 do que as sistema de mensagens instantâneas (MI).Ana Maria continua a usar a longo prazo sistema de mensagens ChannelManagerobjeto Criado em em na etapa 3 para enviar uma assinatura digital falsa para Roberto.Nas versões 4 e 5, a ferramenta de mensagens Instantâneas de Bob foi atualizada para ignorar este objeto.No entanto, Mallory pensa que a assinatura é Válido e o usa para assinar suas chaves criptográficas e de suas mensagens.Isso prova para ser seu downfall.

  5. Transmissão de chave Público de criptografia: O VersionSinalizar é examinada novamente. Na versão 2 e posterior, a longo prazo de sistema de mensagens de ChannelManagerobjeto Criado em em na etapa 3 é usado para enviar e receber as chaves de criptografia Público.

Depois que os nomes de canal, assinaturas digital e as chaves criptográficas têm sido trocadas, Ana Maria e Luís usam ChannelManagerCriado em em na etapa 3 para transmitir mensagens.

Consulte também

Referência

NamedPipeServerStream

NamedPipeClientStream

Conceitos

Exemplo da comunicação segura, criptografia Próximo Generation (CNG)

Código de Fonte de ChannelManager.cs (exemplo CNG)

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