Annotation of researchv10dc/vol2/auth/auth.ms, revision 1.1.1.1

1.1       root        1: .so ../ADM/mac
                      2: .XX authmgr 531 "Authmgr \(em An Authentication Service for Datakit"
                      3: .TL
                      4: Authmgr \(em An Authentication Service for Datakit
                      5: .AU
                      6: David Cohrs
                      7: .AI
                      8: Computer Sciences Dept.
                      9: .br
                     10: University of Wisconsin \(em Madison*
                     11: .AB
                     12: .PP
                     13: \fIAuthmgr\fP is a service available on Ninth Edition
                     14: .UX
                     15: systems for authenticating users.
                     16: It can be used to authenticate users inside an organization, to
                     17: authenticate a terminal or workstation, or to help protect the
                     18: organization from network intrusions, while allowing legitimate
                     19: outside users to access the organization's computers.
                     20: \fIAuthmgr\fP receives calls from users, challenges them for a password
                     21: or for some other response, such as the outcome of encrypting
                     22: some challenge message.
                     23: When the user is authenticated, \fIauthmgr\fP makes use of the redial
                     24: mechanism provided by Datakit to redial the newly authenticated
                     25: call to a new service, such as a remote login service.
                     26: This paper describes the design and implementation of \fIauthmgr\fP,
                     27: as well as the re-implementation of call redial in the research
                     28: Datakit control computer, and the administrative options used
                     29: to implement \fIauthmgr\fP's policy decisions.
                     30: .AE
                     31: .2C
                     32: .FS
                     33: * This work was performed while the author was a summer intern at
                     34: .MH
                     35: .FE
                     36: .NH 1
                     37: Introduction
                     38: .PP
                     39: \fIAuthmgr\fP allows users to authenticate themselves and to make authenticated
                     40: calls within a trusted hardware environment, even if their call
                     41: originated outside that trusted environment.
                     42: To make authenticated calls, \fIauthmgr\fP makes use of a redial mechanism
                     43: supported by the network interface.
                     44: It was written to work in a Datakit environment, however,
                     45: any virtual circuit network
                     46: that supports the necessary redial mechanism could use \fIauthmgr\fP.
                     47: \fIAuthmgr\fP itself runs on a
                     48: .I "security computer" ,
                     49: currently a 10th Edition
                     50: .UX
                     51: system.
                     52: It interfaces with the Datakit network via the Datakit
                     53: interface manager (also running on the
                     54: security computer) and the
                     55: control channel from the security computer to
                     56: the Datakit node to which it is attached.
                     57: .PP
                     58: \fIAuthmgr\fP serves three basic purposes.
                     59: First, it allows users from outside the trusted part of the network
                     60: (the
                     61: .I "untrusted domain" )
                     62: to access the trusted part (the
                     63: .I "trusted domain" ),
                     64: without the use of ``in the clear'' passwords.
                     65: This helps to protect legitimate users in the untrusted domain
                     66: from other, less honorable, users also in the untrusted domain.
                     67: .PP
                     68: Second, all calls from outside the trusted domain can be shunted
                     69: through to the authentication manager, rather than allowing them
                     70: to be placed directly, as shown is Figure 1.
                     71: This allows a security check on the untrusted user before allowing
                     72: them to even attempt to access any service provided in the
                     73: trusted domain.
                     74: If the user fails the check, they have no way of accessing any of
                     75: the services inside the trusted domain, even those unprotected
                     76: services that are available to all users inside the trusted domain.
                     77: This is useful in the environment at AT&T Bell Laboratories, where the
                     78: trusted domain is made up of the various labs inside the company, and
                     79: the untrusted domain is the experimental XUNET network, connecting
                     80: the Murray Hill location to a number of universities around the
                     81: country.
                     82: .1C
                     83: .KF
                     84: .so fig1.x
                     85: .DS C
                     86: Figure 1.  Rerouted call from an untrusted trunk
                     87: .DE
                     88: .KE
                     89: .2C
                     90: .PP
                     91: The third purpose of \fIauthmgr\fP is to allow users of
                     92: Gnot terminals to authenticate themselves to the network (equivalent
                     93: to logging into a host computer), and have
                     94: that terminal remain authenticated throughout the duration of their
                     95: session, as shown in Figure 2.
                     96: The Gnot terminal|reference(locanthi gnot)
                     97: is a small computer with a video display and a network
                     98: interface, but no disk.
                     99: When powered on or reset, the Gnot makes a network call to a file server
                    100: and retrieves an operating system kernel that
                    101: allows it to run window systems, editors, and make network connections
                    102: to other computers.
                    103: The session terminates when the user resets or powers down the Gnot.
                    104: The file server needs to have an authenticated username associated
                    105: with a session, in order that it may do privilege checking.
                    106: That is
                    107: .I authmgr 's
                    108: job.
                    109: .1C
                    110: .KF
                    111: .so fig2.x
                    112: .DS C
                    113: Figure 2.  Authenticating a Gnot
                    114: .DE
                    115: .KE
                    116: .2C
                    117: .........
                    118: .NH 2
                    119: The Software Architecture
                    120: .PP
                    121: Providing the three services described above required
                    122: implementing the authentication manager
                    123: itself, and also making changes to the software on the Datakit
                    124: control computer.
                    125: The control computer changes allow it to redial authenticated calls,
                    126: to redirect calls coming in over untrusted trunks and
                    127: to store the authentication information for the Gnots.
                    128: The authentication manager handles all interactions with the
                    129: user, obtaining a login name and a unique authenticator from the user.
                    130: The controller software must be able to pass back the dialstring
                    131: to the originating point of the call and either redial the call from
                    132: that point, or
                    133: store the authentication information if
                    134: the caller was a Gnot.
                    135: In addition, the trunk module software must be able to
                    136: automatically redirect calls that come from an untrusted domain
                    137: to the authentication manager.
                    138: Implementing these functions required changes to both the trunk
                    139: module processes and the host computer module processes.
                    140: .PP
                    141: An implementation of the redial mechanism had previously been
                    142: done by Wetzel|reference(wetzel radian)
                    143: for the generic Radian controller, which is slightly different from the
                    144: Datakit controller used inside Murray Hill, so redial was
                    145: reimplemented, with some improvements, for the research controller.
                    146: Because of the direct application of redial we had in mind,
                    147: the redial mechanism is currently supported only for hosts and
                    148: on trunks (a Gnot looks like a host to the Datakit controller).
                    149: If a user at a normal terminal attempts to call \fIauthmgr\fP
                    150: and then redial their call, the redial will fail, because the necessary
                    151: synchronization and redial code has not been added to
                    152: the terminal module software.
                    153: .PP
                    154: The paper proceeds as follows.
                    155: The second section describes the functions of
                    156: the authentication manager and its implementation.
                    157: The third section describes the redial mechanism implemented
                    158: for the Datakit, and how it is
                    159: used in conjunction with the authentication manager.
                    160: The administrative hooks that were added to the system are also described
                    161: in this section.
                    162: Some final comments and conclusions constitute the fourth section.
                    163: .NH 1
                    164: The Authentication Manager
                    165: .PP
                    166: The purpose of the authentication manager is to determine
                    167: whether a user is really who they claim to be.
                    168: One common way of determining the authenticity of a user is
                    169: by asking them to enter a password (once we know the username
                    170: they claim to be).
                    171: The problem with using this approach over a network is that
                    172: the password
                    173: is usually sent ``in the clear'', although it isn't echoed
                    174: at the user's terminal.
                    175: If someone manages to tap into the user's line or the network
                    176: itself, the password will be compromised.
                    177: Obviously, a simple password is not a good way to authenticate
                    178: users over an untrusted network.
                    179: .PP
                    180: A simple solution is to ask the user for the appropriate response
                    181: to some challenge, something that can be sent as normal,
                    182: character data, but won't be easily compromised.
                    183: This is the approach taken by \fIauthmgr\fP.
                    184: Currently, the challenge that \fIauthmgr\fP transmits is a decimal
                    185: number, up to 8 digits long.
                    186: The user must obtain an encryption calculator from the system
                    187: administrators to encrypt this number.
                    188: \fIAuthmgr\fP was designed so that it could be quickly extended
                    189: to support any manufacturer's encryption
                    190: calculator, but at the current time, only one is supported.
                    191: This box, an Atalla
                    192: .I Confidante
                    193: terminal (despite the designation ``terminal'', the calculator is a small,
                    194: 2" \(mu 3" \(mu \(14" box), is programmed to encrypt
                    195: data with a key, the key having been
                    196: entered into the terminal by the system administrator at
                    197: the time the terminal is assigned.
                    198: The 
                    199: .I Confidante
                    200: box uses standard DES encryption to encrypt the
                    201: numeric data with this key.
                    202: The terminal also requires a password, which the user must enter
                    203: before encrypting the challenge.
                    204: When the user enters the challenge, the terminal displays an 8 hex
                    205: digit number, which the user enters at their keyboard.
                    206: Assuming this was the correct response, \fIauthmgr\fP can proceed.
                    207: .PP
                    208: \fIAuthmgr\fP also allows some users to enter the normal login and
                    209: password sequence they are used to.
                    210: This is useful inside the trusted organization, where the problem
                    211: of compromising a password are much less, and
                    212: carrying around a challenge box becomes a bother.
                    213: This option can be specified on the basis of the source of the call,
                    214: or on a per-user basis.
                    215: .PP
                    216: Another important choice in designing \fIauthmgr\fP was whether calls coming
                    217: from outside the trusted domain should go first to the service the
                    218: untrusted user requested (for example, the user could request to
                    219: log into a trusted machine, and the call would go directly to the
                    220: remote login service on that machine), and have that service call
                    221: \fIauthmgr\fP for authentication purposes, or whether calls should automatically
                    222: be rerouted to \fIauthmgr\fP.
                    223: The former case would have required no changes to the network software,
                    224: but is much too trusting.
                    225: Many services in the trusted domain (AT&T Bell Labs, in this case)
                    226: were written assuming that only the trusted domain existed.
                    227: Allowing untrusted users to access these services could breach the
                    228: security of the trusted domain, or give away information that the
                    229: trusted domain is not allowed to give out (due to licensing or other
                    230: similar restrictions).
                    231: .PP
                    232: In the interest of the security of all of the services in the trusted
                    233: domain, \fIauthmgr\fP was designed assuming that calls from outside its
                    234: domain would be rerouted to \fIauthmgr\fP first, before they could reach any
                    235: unprotected services.
                    236: This requires that the networking software reroute calls, and also
                    237: requires that \fIauthmgr\fP be able to redial a call to a new destination
                    238: once authentication is completed.
                    239: The benefits of reducing the chances of information leaking out
                    240: of the trusted domain far outweigh the added complexity to the
                    241: networking software.
                    242: In addition, none of the existing services need to change to benefit
                    243: from the added authentication step.
                    244: .NH 2
                    245: Authmgr Operation
                    246: .PP
                    247: \fIAuthmgr\fP operates in three different modes, depending on the command
                    248: line arguments and its environment at the time it is executed.
                    249: In the first mode, \fIauthmgr\fP assumes it is interacting with a human
                    250: user at a terminal.
                    251: This mode is used when a user connects directly to \fIauthmgr\fP.
                    252: The user is prompted for a login name (unless \fIauthmgr\fP can determine
                    253: the user's login name from its environment), and then is challenged
                    254: to encrypt a number or enter a password.
                    255: The user encrypts the number using their encryption calculator and
                    256: in any case, enters the response.
                    257: \fIAuthmgr\fP tests this against the correct response, and, if it is correct,
                    258: prompts the user for a new destination.
                    259: The user enters a new destination, and \fIauthmgr\fP attempts to redial
                    260: the call.
                    261: Figure 3 shows an example of such a session.
                    262: .1C
                    263: .KF
                    264: .sp .5v
                    265: .DS B
                    266: .CW
                    267: coma(cohrs): con -l security.security
                    268: Security Authentication check
                    269: 
                    270: login: cohrs
                    271: Enter response code for 31746735: 41a46474
                    272: 
                    273: Number please: seki.whoami
                    274: source=dk!nj/astro/security user=cohrs line=astro2.57.27.F
                    275: Eof
                    276: coma(cohrs):
                    277: .R
                    278: .DE
                    279: .DS C
                    280: Figure 3.  A simple, interactive Authentication Session
                    281: .DE
                    282: .KE
                    283: .2C
                    284: .PP
                    285: The second form is also interactive, but is used when the user is
                    286: using a Gnot terminal.
                    287: In this mode, the Gnot, when it is powered up,
                    288: automatically connects to \fIauthmgr\fP using
                    289: a special service name.
                    290: \fIAuthmgr\fP again prompts the user for a login name and a challenge.
                    291: However, when the user correctly enters the response, \fIauthmgr\fP
                    292: does not ask for another destination.
                    293: Instead, it redials the call to a special destination that the
                    294: network software understands as being an ``authentication only''
                    295: message.
                    296: When the source receives the redial message, it saves the authenticated
                    297: name and location of the user in a safe place, and closes the connection
                    298: to \fIauthmgr\fP.
                    299: Until the Gnot is reset,
                    300: all subsequent calls go out using this authenticated login name and
                    301: security ID.
                    302: .PP
                    303: The third form is meant to be used in conjunction with the various
                    304: remote login services available on the Datakit networks, especially
                    305: the
                    306: .CW dcon
                    307: service (used by the
                    308: .I con
                    309: program),
                    310: and the call rerouting option available at
                    311: the trunk from an untrusted domain of the network to the trusted domain.
                    312: Here, an untrusted user requests to connect to the remote login service of
                    313: a computer in the trusted domain.
                    314: When the call reaches the trunk to the trusted domain, the control
                    315: process on the trunk reroutes the call to \fIauthmgr\fP (the details of
                    316: this will be explained later).
                    317: When \fIauthmgr\fP is executed to handle the call, one of the parameters in
                    318: its environment is the original destination of the call, namely the
                    319: login service of some host in the trusted domain.
                    320: .PP
                    321: \fIAuthmgr\fP sends out a special message understood by
                    322: .I con .
                    323: .I Con
                    324: prompts the user for a login name, and sends this back to \fIauthmgr\fP.
                    325: \fIAuthmgr\fP uses the login name to find the key (or password) for this
                    326: user, and sends back the appropriate challenge.
                    327: .I Con
                    328: requests that the
                    329: user encrypt the challenge or enter a password, if this is a connection
                    330: inside the trusted domain.
                    331: Once it receives the information,
                    332: .I con
                    333: sends a message back to \fIauthmgr\fP
                    334: containing the response from the user.
                    335: If this is the correct response, the remote login protocol continues
                    336: as normal, otherwise, \fIauthmgr\fP again sends a challenge, and the cycle
                    337: repeats.
                    338: An example of this usage is shown in Figure 4.
                    339: While the actual prompts are similar, it should be noted that con
                    340: is prompting the user for the data in this example, not
                    341: \fIauthmgr\fP; \fIauthmgr\fP communicates with con over the network connection.
                    342: Pseudocode for \fIauthmgr\fP's side of the protocol with
                    343: .I con
                    344: is shown
                    345: in Figure 5.
                    346: .1C
                    347: .KF
                    348: .DS
                    349: .CW
                    350: fishonaplatter(cohrs): con seki
                    351: login: cohrs
                    352: Enter response for 55374202: 57406251
                    353: seki(cohrs):
                    354: .R
                    355: .DE
                    356: .DS C
                    357: Figure 4.  A Rerouted Call to a Remote Login Service
                    358: .DE
                    359: .KE
                    360: .2C
                    361: .PP
                    362: \fIAuthmgr\fP is executed once for each session that requires authentication.
                    363: Upon startup, it reads some initial configuration information from
                    364: its configuration file.
                    365: This includes such things as the maximum number of tries a user gets
                    366: before \fIauthmgr\fP closes the connection, and mappings between original
                    367: source identifiers and new security identifiers.
                    368: This configuration file is explained in detail in the accompanying
                    369: manual page for \fIauthmgr\fP, found at the end of this paper.
                    370: .PP
                    371: The keys are also stored in a file on the security computer's disk.
                    372: This file contains extremely sensitive information, because the
                    373: keys are necessarily stored unencrypted, unlike the passwords in the
                    374: .UX
                    375: password file.
                    376: For this reason, access to the security computer must be severely
                    377: limited, not even allowing a remote login service.
                    378: At the present time, the key file is stored in a protected place,
                    379: but the file itself is not encrypted.
                    380: In some future version on \fIauthmgr\fP, this file could be encrypted, but
                    381: that would require human intervention to enter the encryption key
                    382: when \fIauthmgr\fP starts up.
                    383: For the purpose of simplicity, and to remove the need for human
                    384: intervention, the
                    385: current version relies on the physical security of the keys file.
                    386: .PP
                    387: The final aspect of \fIauthmgr\fP's operation is its use of the redial
                    388: feature.
                    389: \fIAuthmgr\fP redials the call through use of a new
                    390: .I ipcredial
                    391: library call in the Tenth Edition
                    392: .UX
                    393: IPC library.
                    394: \fIAuthmgr\fP generates a message containing the authenticated name of
                    395: the user, the new authenticated security identifier, and the
                    396: new destination to redial.
                    397: For security reasons, the ipcredial only works for the superuser.
                    398: Once the call has been redialed, either successfully or
                    399: unsuccessfully, the connection from \fIauthmgr\fP to the remote user
                    400: is closed, and \fIauthmgr\fP exits.
                    401: All in all, implementing \fIauthmgr\fP itself was straightforward,
                    402: and the system support was easily adapted to the redial application.
                    403: .1C
                    404: .KF bottom
                    405: .DS
                    406: .CW
                    407: int d;
                    408: char user[];
                    409: char response[];
                    410: char challenge[];
                    411: 
                    412: con!"CH";\h'8n'/* the magic challenge protocol string */
                    413: *[
                    414: \h'8n':: con?user ->
                    415: \h'16n'challenge = makechallenge(getkeyinfo(user));
                    416: \h'16n'con!challenge;
                    417: \h'16n'con?response;
                    418: \h'16n'encrypt(getkeyinfo(user),challenge) == response ->
                    419: \h'24n'redial();\h'8n'/* \fIauthmgr\fP exits */
                    420: \h'16n'con!"CH";
                    421: \h'8n':: con?EOF ->
                    422: \h'16n'exit();
                    423: ]
                    424: .R
                    425: .DE
                    426: .DS C
                    427: Figure 5.  The \fIAuthmgr\fP Remote Login Protocol
                    428: .DE
                    429: .KE
                    430: .2C
                    431: .NH 1
                    432: The Datakit Redial Mechanism
                    433: .PP
                    434: The redial mechanism itself is supported in the network control
                    435: software.
                    436: In the case of the Datakit, where this work was done, this
                    437: control software exists inside the network itself, in the
                    438: Datakit nodes.
                    439: Each Datakit node has an associated control computer; the
                    440: research Datakit nodes use Digital PDP-11/23 style computers for
                    441: the control computer, which directly controls the switch memory
                    442: of the Datakit node.
                    443: The redial mechanism is implemented as part of the software
                    444: running on this control computer.
                    445: .PP
                    446: Each device that connects to the Datakit network connects to
                    447: the Datakit node via a module, an interface card that lives
                    448: on the Datakit backplane.
                    449: A process inside the Datakit controller is in charge of
                    450: controlling this module.
                    451: In addition, if the module is multiplexed, there is a line
                    452: process in the Datakit controller to control each line of
                    453: the multiplexer (for our purposes, we can consider almost any
                    454: module to be multiplexed, especially the host and trunk
                    455: modules, in which a line is a single, logical channel on the module).
                    456: .PP
                    457: Datakit includes a standard signaling protocol, called VLP,
                    458: which is used
                    459: for setting up and taking down calls.
                    460: VLP defines the interactions between
                    461: the control processes for the source and destination modules
                    462: in the Datakit controller.
                    463: There are additional control messages between the line and
                    464: control processes within the same module, but these are not
                    465: defined as part of VLP.
                    466: .PP
                    467: Implementing the redial mechanism in the Datakit controller
                    468: required changing VLP, and adding two new messages,
                    469: CALLMOD and SIREQ.
                    470: These messages are defined to occur only when a connection
                    471: has been established; in most control processes, this is called
                    472: the TALKING state.
                    473: CALLMOD is a completely new message and is used for passing
                    474: the new dialstring back to the point at which the call will
                    475: be redialed.
                    476: SIREQ already exists in the generic Datakit controller,
                    477: and is used by the splice mechanism, but did not exist
                    478: in the research controller.
                    479: This message informs the originating point of the call (the
                    480: end of the original connection that still exists in the
                    481: new, redialed connection) that it needs to resynchronize its
                    482: higher level protocols with its new peer.
                    483: .PP
                    484: Basically, a redial consists of two phases.
                    485: The first phase uses CALLMOD messages to pass the new dialstring
                    486: from the module that wants to redial the call to the module
                    487: that will actually redial the call.
                    488: At the same time, this portion of the original connection is
                    489: closed down.
                    490: When the CALLMOD message reaches the
                    491: .I "redial point" ,
                    492: the module
                    493: that should actually redial the call, the line process for
                    494: this connection at that module generates a CALL message to
                    495: open up a new connection to the new dialstring.
                    496: This is the second phase of the redial.
                    497: The redial point eventually receives an ANSWER or a NAK message back from
                    498: the new destination of the call.
                    499: This part of the protocol works just as if this were a normal
                    500: call.
                    501: .PP
                    502: When the ANSWER reaches the redial point, instead of
                    503: propagating it back to the source, we instead send the source
                    504: an SIREQ message, telling it to resynchronize its protocols,
                    505: and the new connection is established.
                    506: The sending of the SIREQ message here differs from Wetzel's
                    507: redial implementation, which assumes that the higher level
                    508: protocols are using URP, and puts an URP initialization request
                    509: into the datastream.
                    510: We considered this to be incorrect, and possibly harmful to
                    511: correct communication, and opted for fully integrating redial
                    512: into the VLP protocol instead, even to the point of reinitializing
                    513: the source of the original call.
                    514: .1C
                    515: .KF
                    516: .so fig6.x
                    517: .DS C
                    518: Figure 6.  Redialing a call on Datakit using VLP
                    519: .DE
                    520: .KE
                    521: .2C
                    522: .PP
                    523: Figure 6 shows an example of these two phases of call redial.
                    524: In this example, a user on the host
                    525: .CW coma
                    526: has connected to the host
                    527: .CW security ,
                    528: presumably to use \fIauthmgr\fP (this step is labeled 1 in the figure).
                    529: After authentication, \fIauthmgr\fP redials the call from itself to
                    530: the host named
                    531: .CW west .
                    532: This causes the connection from the node1 Datakit to the security
                    533: host to close (this step is labeled 2, and is phase 1 of the redial).
                    534: When the redial request reaches node1, the control process starts
                    535: a new call to the host
                    536: .CW west .
                    537: This call completes in step 3, and now the user on
                    538: .CW coma
                    539: is connected to
                    540: .CW west .
                    541: .PP
                    542: In the example, the redial took place on the originating Datakit
                    543: node.
                    544: This makes for the most optimal path from
                    545: .CW coma
                    546: to
                    547: .CW west .
                    548: If we had performed the redial at node2 instead of node1, all messages
                    549: between
                    550: .CW coma
                    551: and
                    552: .CW west
                    553: would have had to go through 3 Datakit
                    554: nodes, rather than 2, increasing the delay and increasing the
                    555: load on node2 unnecessarily.
                    556: However, in cases where the original call comes from an untrusted
                    557: domain, we would want the redial message (phase 1) to be intercepted
                    558: by the node at the edge of the trusted domain, and have the new
                    559: call be placed from there.
                    560: .PP
                    561: This scenario is shown in Figure 7.
                    562: Here,
                    563: .CW pokey
                    564: is a computer in the untrusted domain, and is connected
                    565: to the Datakit node, nodex.
                    566: Once again, the user on pokey calls the security host, and has their
                    567: call redialed to
                    568: .CW west
                    569: (steps 1 and 2).
                    570: However, node1 intercepts the redial message and performs phase 2
                    571: of the redial itself, rather than forwarding it on to nodex, which
                    572: it doesn't trust.
                    573: After the call is redialed from node1, the connection is resynchronized,
                    574: and
                    575: .CW pokey
                    576: is now connected to
                    577: .CW west .
                    578: .1C
                    579: .KF top
                    580: .so fig7.x
                    581: .DS C
                    582: Figure 7.  Intercepting a redialed call
                    583: .DE
                    584: .KE
                    585: .2C
                    586: .NH 2
                    587: Message Flow to Implement Call Redial
                    588: .PP
                    589: The message flow to implement call redial is more involved than
                    590: forwarding on the CALLMOD, CALL and SIREQ message, due to the
                    591: software structure of the Datakit controller.
                    592: All VLP messages travel out-of-band of the data, and messages
                    593: between module pairs, such as the two sides of a trunk, must
                    594: travel via the control channel between these two sides.
                    595: This amounts to a 4 way communication to pass VLP information
                    596: around in the network.
                    597: I will first detail the messages necessary to implement
                    598: phase 1 of the redial, both from the host to the Datakit, and
                    599: between trunks, and terminating in the initiation of a new call.
                    600: Next, I will explain the messages necessary to resynchronize
                    601: the connection.
                    602: You may want to compare this implementation with Wetzel's.
                    603: .......
                    604: .NH 3
                    605: Phase 1 Host Control Module Messages
                    606: .PP
                    607: Initiating a redial from a host requires the use of two Datakit
                    608: channels, the host's control channel, and the data channel
                    609: that will be redialed.
                    610: All changes on the host were done in user level servers, no
                    611: kernel modifications were necessary, not even to the stream
                    612: handlers.
                    613: Because the host modifications were straightforward and were
                    614: not made by me, I will not detail them here.
                    615: .PP
                    616: The message sequence is shown in Figure 8.
                    617: When \fIauthmgr\fP redials its connection, it uses the
                    618: .I ipcredial
                    619: library call to pass the call back to the Datakit call
                    620: manager
                    621: .I dkmgr
                    622: on the security host.
                    623: The call manager passes a control message of type T_CHG over the
                    624: Datakit control
                    625: connection containing a D_REDIAL request and the line identifier
                    626: for the data channel (step 1).
                    627: The control process, unixcscp, notifies the line process, unixp, identified
                    628: in the D_REDIAL message of the redial, with an EXTFUNC (for extended
                    629: function) message, with subtype D_REDIAL (step 2).
                    630: When it receives this message, the line process changes the switch
                    631: setting in the Datakit so when the host sends data on the data channel,
                    632: the line process will receive this data, rather than having the data
                    633: sent to the originating end of the call.
                    634: The line process notifies
                    635: .I dkmgr
                    636: that it is ready for the dialstring
                    637: by sending an ``O'' character as a dialtone (step 3).
                    638: The host responds with the dialstring, and closes its end of the
                    639: data channel (step 4).
                    640: The dialstring sent by the host is exactly the same as the dialstring
                    641: used when placing new calls; no changes were made to the format.
                    642: .1C
                    643: .KF bottom
                    644: .so fig8.x
                    645: .DS C
                    646: Figure 8.  Phase 1 Host Control Messages
                    647: .DE
                    648: .KE
                    649: .2C
                    650: .PP
                    651: Unixp is not the process that should actually perform the redial,
                    652: because it was the destination of the old call, so it must forward
                    653: the new dialstring back along the path of the call to the process
                    654: that originated the call, or a trunk process that will intercept
                    655: the redial.
                    656: It does this in step 5, by sending a CALLMOD message, which contains
                    657: the new dialstring, to the module that originated the call.
                    658: Unixp then hangs up its end of the old connection by sending a
                    659: HANGUP message to unixcscp in step 6.
                    660: This ends the host's involvement in phase 1 of the redial.
                    661: .NH 3
                    662: Phase 1 Trunk Control Module Messages
                    663: .PP
                    664: The redial in the trunk is even more complicated than that of the
                    665: host, because the trunk must be able to both pass a redial through,
                    666: if it is not the redial point, or intercept the redial message,
                    667: if this trunk goes to an untrusted domain.
                    668: Once again, there are four processes involved, the control processes
                    669: on each side of the trunk, tdkp, and the line processes, tdktrkp,
                    670: which control the data channel of this connection.
                    671: .PP
                    672: Figure 9 shows the control flow for a trunk that passes CALLMOD
                    673: requests through, unchanged.
                    674: First, the tdktrkp on the redialing side receives a CALLMOD from
                    675: a unixp or another tdktrkp.
                    676: It wants to pass this on through the trunk, but must use the
                    677: control process, tdkp to do so, and sends tdkp an EXTFUNC/D_REDIAL
                    678: message (step 2).
                    679: Tdkp responds to this by sending a T_CHG/D_REDIAL message to
                    680: its peer on the other side of the trunk, along with the line
                    681: identifier for the data channel (step 3).
                    682: The remote tdkp sends an EXTFUNC/D_REDIAL message down to
                    683: the correct line process (step 4), which causes that tdktrkp
                    684: to give a dialtone for the new dialstring (step 5).
                    685: The redialing tdktrkp responds by sending the dialstring (step 6).
                    686: It is now completed with this call, but waits for the remote
                    687: tdktrkp to complete sending the dialstring on.
                    688: .1C
                    689: .KF
                    690: .so fig9.x
                    691: .DS C
                    692: Figure 9.  Phase 1 Trunk Control Messages
                    693: .DE
                    694: .KE
                    695: .2C
                    696: .PP
                    697: The remote tdktrkp once again packages up the dialstring in a
                    698: CALLMOD message, which it sends on to its peer (presumably the
                    699: line process for another trunk or a host) in step 7.
                    700: The remote tdktrkp is also finished with this call
                    701: and sends a CLOSE to its trkp (step 8).
                    702: This causes the normal tear down to take place between the trunk
                    703: processes, which eventually causes an ONHOOK message to be received
                    704: by the other tdktrkp (step 9),
                    705: which then finishes cleaning up this connection.
                    706: In this way, the CALLMOD gets forwarded through the network,
                    707: and the old portion of the call gets torn down at the same time.
                    708: .NH 3
                    709: Phase 2 Trunk Control Module Messages
                    710: .PP
                    711: Eventually, the CALLMOD reaches the originating host control
                    712: process or a trunk to an untrusted domain, and phase 2 begins.
                    713: Because phase 2 is more interesting in the intercept case,
                    714: the trunk intercept case is described here
                    715: The host redial case is similar, and somewhat simpler.
                    716: .PP
                    717: Figure 10 shows the messages involved in phase 2 of a trunk
                    718: that intercepts the redial message.
                    719: The trunk first receives the CALLMOD message from its peer, just
                    720: like it would if it were forwarding the redial.
                    721: However, when it checks its administrative database, it determines
                    722: that it should intercept the redial.
                    723: It sends out a new CALL message to the new destination (step 2)
                    724: and waits for a response.
                    725: In this example, the call succeeds, and the tdktrkp receives
                    726: an ANSWER message from its new peer (step 3).
                    727: .1C
                    728: .KF
                    729: .so fig10.x
                    730: .DS C
                    731: Figure 10.  Phase 2 Trunk Control Messages
                    732: .DE
                    733: .KE
                    734: .2C
                    735: .PP
                    736: In Wetzel's redial implementation, phase two ends here.
                    737: However, we really need to send back to the originating host,
                    738: via the control channels, a resynchronization message.
                    739: Wetzel's method of inserting control bytes into the data stream
                    740: is unacceptable \- a trunk process cannot know the high level
                    741: protocol the endpoints were using, and assuming that they use URP,
                    742: while correct in the current state of the Datakit, may not work
                    743: in the long run.
                    744: In addition, this choice violates the abstraction presented by VLP.
                    745: .PP
                    746: Phase 2 continues by telling the originating host to resynchronize
                    747: its high level protocols with the new peer.
                    748: Tdktrkp, after it receives the ANSWER, notifies its tdkp about
                    749: this with an SIREQ message (step 4).
                    750: The tdkp then sends a T_CHG/D_XINIT message across the control channel
                    751: to its peer on the other side of the trunk (step 5), along with
                    752: the line identifier for the data channel that needs resynchronization.
                    753: The remote tdkp notifies the correct tdktrkp line process with an
                    754: SIREQ message as well (step 6).
                    755: The receiving tdktrkp forwards the synchronization message along
                    756: by sending an SIREQ message to its peer module (step 7).
                    757: If step 1 were the receipt of an SIREQ rather than a CALLMOD, the
                    758: sequence would be the same, without the CALL or ANSWER.
                    759: .NH 3
                    760: Phase 2 Host Control Module Messages at the Originating Host
                    761: .PP
                    762: When a line process on a host interface module receives an SIREQ
                    763: message from its peer (either a trunk or another host module),
                    764: it must notify the host itself of the synchronization request.
                    765: This message sequence is shown in Figure 11.
                    766: The unixp process receives the SIREQ (step 1), and sends an
                    767: SIREQ to its controlling unixcscp (step 2).
                    768: In the generic Datakit, the splice operation resynchronizes a host
                    769: by sending it a T_SRV/D_XINIT message.
                    770: Because this message does not depend on the splice operation at
                    771: all, we use it here.
                    772: Unixcscp sends the host a T_SRV/D_XINIT message over the control
                    773: channel.
                    774: A modification was necessary in the streams modules in the
                    775: kernel to process this message.
                    776: This message is intercepted by the streams modules,
                    777: and causes the data channel to resynchronize (it resets sequence
                    778: numbers and any other necessary end-to-end negotiations).
                    779: At this point, the redial is completed.
                    780: .1C
                    781: .KF bottom
                    782: .so fig11.x
                    783: .DS C
                    784: Figure 11.  Phase 2 Host Control Messages
                    785: .DE
                    786: .KE
                    787: .2C
                    788: .NH 2
                    789: Administrative Changes to Implement Call Redial
                    790: .PP
                    791: The redial mechanism, by itself, is not enough to support \fIauthmgr\fP.
                    792: Additional changes were necessary in the administrative and
                    793: configuration portions of the Datakit control software.
                    794: One of these changes, the redial intercept, has already been mentioned.
                    795: This and other changes will be detailed in this section.
                    796: .PP
                    797: In order to restrict the use of the redial operation, a new option
                    798: was added to the host module configuration description.
                    799: This option is a simple boolean, which says whether the host is
                    800: allowed to issue redial operations or not.
                    801: There are two reasons for this.
                    802: First, to support \fIauthmgr\fP, the redial dialstring from the host includes
                    803: not only the name of the new destination, but an authenticated
                    804: username and the authenticated security ID for \fIauthmgr\fP.
                    805: Only the security host should be allowed to send out such messages.
                    806: In general, only the Datakit is allowed to put the security ID into
                    807: the dialstring.
                    808: Furthermore, allowing anyone to perform a redial confuses the
                    809: authentication system already in place.
                    810: A redialed call from anyone but \fIauthmgr\fP would contain the username
                    811: of the
                    812: .I redialer ,
                    813: not the username of the original caller (the other end of the connection),
                    814: and the security ID of the redialed call would be that of the
                    815: redialer as well.
                    816: This would foil the authentication checks made by the recipient of
                    817: the redialed call, making the redialed call appear as if it came from
                    818: the host that redialed the call, rather than from the original caller.
                    819: For this reason, redial is completely restricted to specific, secure
                    820: hosts, and only the superuser (\fIauthmgr\fP runs as the superuser) can
                    821: take full advantage of the redial feature.
                    822: .PP
                    823: Another boolean option was added to the host module configuration
                    824: description to support the authentication of Gnots.
                    825: In this case, we wish the entire module to retain the knowledge that
                    826: this Gnot is currently authenticated.
                    827: Therefore, on a module that is connected to a Gnot rather than a
                    828: regular,
                    829: .UX
                    830: host, the Datakit administrator can set this option to retain the
                    831: authentication information.
                    832: When a CALLMOD request comes into a unixp line process on such a
                    833: module, it stores the authenticated username and security ID in
                    834: the control database.
                    835: All further calls from the Gnot use these values for the username
                    836: and security ID instead of anything the Gnot or the normal database
                    837: entries contain.
                    838: When the Gnot is reset, or its power is cycled, this information is
                    839: erased, and the next user will have to be re-authenticated.
                    840: .PP
                    841: The previously mentioned redial intercept option was added to the
                    842: trunk module configuration description.
                    843: This is also a boolean, and, if set, marks the trunk as
                    844: untrusted.
                    845: If a CALLMOD arrives from another module on this side of the
                    846: trunk, it will be intercepted, and the redial will take place
                    847: at the trunk, rather than being forwarded.
                    848: .PP
                    849: Two more configuration options are available for the trunk.
                    850: The first is necessary to guarantee the authenticity of \fIauthmgr\fP's
                    851: security ID.
                    852: The Datakit administrator can enter \fIauthmgr\fP's security ID into
                    853: one of the fields in
                    854: the configuration for an untrusted trunk.
                    855: When a call comes in over the untrusted trunk, the security ID
                    856: on the call is compared with the security ID of \fIauthmgr\fP.
                    857: If it is the same, the security ID on the call is changed to
                    858: be that of someone who is completely unknown and untrusted.
                    859: This keeps unscrupulous people in the untrusted domain from
                    860: making fake, ``authenticated'' calls through the trunk.
                    861: .PP
                    862: The other option protects the integrity of the trusted domain.
                    863: Here, the Datakit administrator can define a destination through
                    864: which all calls from the untrusted trunk should be
                    865: .I rerouted .
                    866: When this field is set (this is known as the Predefined Destination
                    867: field) on a trunk, any call arriving from the trunk will be
                    868: rerouted to this predefined destination.
                    869: The name of the old destination, as specified in the dialstring,
                    870: is also passed along.
                    871: This is used, for example, to reroute all calls from an untrusted
                    872: domain to \fIauthmgr\fP.
                    873: In this way, no service in the trusted domain can be accessed from
                    874: outside without authenticating the untrusted user
                    875: first.
                    876: .NH 2
                    877: Experience
                    878: .PP
                    879: In implementing call redial, a good portion of the time was spent reading
                    880: the existing code to implement other parts of VLP in the host and
                    881: trunk control modules and also studying Wetzel's call redial implementation.
                    882: Implementing the basic call redial itself was straightforward,
                    883: especially given the references.
                    884: Making the administrative modifications work and integrating
                    885: them with the
                    886: control processes themselves was the most challenging.
                    887: .PP
                    888: The worst part of the implementation
                    889: was in saving the authentication information for the Gnots.
                    890: The database inside the Datakit control computer is highly structured,
                    891: and is not extendible.
                    892: That is, it is impossible, without making major changes to the database
                    893: code and structure, to add new data types and objects to the database.
                    894: Therefore, the authenticated username and security ID were stored
                    895: in two database objects that were otherwise unused for the database
                    896: information on host interface modules.
                    897: The actual purpose of these objects was meant to be somewhat
                    898: different than the
                    899: way they have been applied in this case.
                    900: A better solution would have been to modify the database structure,
                    901: but there was no time for such a major job this summer.
                    902: .NH 1
                    903: Conclusions
                    904: .PP
                    905: \fIAuthmgr\fP is, as far as I know, the first major application of call
                    906: redial in Datakit.
                    907: It allows a trusted domain to interact with a number of untrusted
                    908: domains, while not compromising the trust implicit inside
                    909: the trusted domain.
                    910: The additional use of \fIauthmgr\fP in authenticating Gnots shows its
                    911: versatility, and that it can centralize the authentication tasks
                    912: inside the trusted domain as well.
                    913: The re-implemented redial mechanism points out a problem with
                    914: resynchronization in the generic datakit
                    915: redial mechanism that should be addressed at some point.
                    916: The ease with which \fIauthmgr\fP and call redial fit into the large
                    917: body of existing networking and datakit control code was
                    918: extremely encouraging, and the structure difficulties within
                    919: the control database should be fixable in future versions of
                    920: the datakit control software.
                    921: .NH 1
                    922: Acknowledgements
                    923: .PP
                    924: This work would have been impossible to complete in one summer
                    925: without the direction of my mentor, David Presotto, and the
                    926: help of Bill Marshall and Caryl Carr.
                    927: I extend my thanks to them and to the various other members
                    928: of 1127 that helped make this happen.
                    929: .NH
                    930: References
                    931: .LP
                    932: |reference_placement

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.